目录

Life in Flow

知不知,尚矣;不知知,病矣。
不知不知,殆矣。

标签: Microservices (15)

Apache SkyWalking

布式架构下的排查问题复杂性 分布式应用架构的运维和诊断的过程变得越来越复杂,例如:接口诊断困难、应用性能诊断复杂、架构分析复杂等难题,传统的监控工具并无法满足,分布式链路系统由此诞生 核心:将一次请求分布式调用,使用 GPS 定位串起来,记录每个调用的耗时、性能等日志,并通过可视化工具展示出来 APM 系统(Application Performance Management) 讲到分布式的链路追踪系统,不得不说说它的前世今生了,APM 系统是可以帮助系统的行为做性能分析的工具 APM 系统,它是由谷歌公开的论文提到的,可以说谷歌还是很强的!而到后面,许多的技术公司就基于这边论文的原理,开发出来很多出色的 APM 框架,比如:skywalking、zipkin 等等 SkyWalking Skywalking 是什么 skywalkings 是一款国产的开源框架,在 2015 年开源使用,在 2017 年的时候加入了 Apache 孵化器 skywalking 是分布式应用程序的性能监控工具,专门是为了微服务(spring cloud)、云原生架构与容器架构(docker/....

Swagger接口文档

框架层集成Swagger文档  API虽然没有直接的UI,当API体验是十分重要的。API体验指的就是API文档,文档的书写时一个繁琐的体力活儿。大部分开发人员都不太愿意写文档。所以如果框架能够直接支持文档的自动生成,就会大大简化企业维护API文档的工作。  Springboot支持Swagger文档的自动生成。Swagger是基于当前业界Open API 规范开发的工具链。 Springboot中启用Swagger功能 引入依赖 <dependency> <groupId>io.springfox</groupId> <artifactId>springfox-swagger2</artifactId> </dependency> <dependency> <groupId>io.springfox</groupId> <artifactId>springfox-swagger-ui</artifactId> </dependency> ....

异步调用处理:复制线程上下文

异步调用  在微服务中,多数场景下采用:请求/响应 同步调用的风格,但在有些场景下并不需要同步、或是同步调用的方式性能开销比较大,这是则需要异步调用。(比如:邮件、短信等…)  异步支持也是一个服务框架的基础能力,Springboot通过Java线程池原生支持异步操作。 配置一个服务线程池即可。 ThreadPoolTaskExecutor 配置一个服务线程池 public class AppConfig { public static final String ASYNC_EXECUTOR_NAME = "asyncExecutor"; @Bean(name=ASYNC_EXECUTOR_NAME) public Executor asyncExecutor() { ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor(); // for passing in request scope context executor.setTaskDecorator(new ContextCopyingDecorator())....

强类型接口设计

强、弱类型接口  服务API接口有强、弱类型之分。 强类型接口  传统的RPC服务(定制二进制协议,对消息进行编码和解码),采用TCP传输消息。RPC服务通常有严格的契约,开发服务前需要使用IDL(Interface description language)定义契约,最终通过契约自动生成强类型的服务器端、客户端的接口。服务调用直接使用强类型的客户端。(GRPC、Thrift) 优点:不需要手动的编码和解码、接口规范、自动代码生成、编译器自动类型检查。 缺点:服务端和客户端强耦合、任何一方升级改动可能会造成另一方break。自动代码生成需要工具支持,开发这些工具的成本比较高。强类型接口开发测试不友好、浏览器、Postman这些工具无法直接访问这些强类型接口。 弱类型  Restful服务通常采用JSON作为传输消息,使用HTTP作为传输协议,没有严格契约的概念,使用普通的HTTP Client即可调用。调用方需要对JSON消息进行手动的编码和解码工作。(Springboot) 优点:服务端和客户端非强耦合、开发测试友好。 缺点:调用方手动编码解码,没有自动代码生成、没有编译期接口....

技术选型之Dubbo、SpringCloud、Kubernetes

微服务公共关注点(Common Concerns)  微服务的最终目标是实现服务价值、交付服务价值。为了让开发人员能够专注于业务交付,微服务底层需要使用大量底层基础设施作为支撑。这些基础设施也称为微服务的公共关注点。 Dubbo、Spring Cloud和K8s横向比对  微服务的Common Concerns对应的基础设施,具象到产品表征着不同厂家的不同解法。 优劣比对

微服务核心概念梳理

软件架构的进化  软件架构是在软件的内部,经过综合各种因素的考量、权衡,选择特定的技术,将系统划分成不同的部分并使这些部分相互分工,彼此写作,为用户提高需要的价值。 因素考量 业务需求 技术栈 成本 可扩展性 组织架构(分工) 可维护性 架构进化史   一层架构 -> MVC -> Dubbo 单体架构  功能、业务集中在一个发布包里,部署运行在同一个进程中。 易于开发 易于测试 易于部署 易于水平伸缩(新建服务器、配置好环境、复制软件包)  致命的硬伤: 代码膨胀、难以维护。(分析、定位、修复、成本高) 构建、部署成本大 新人上手困难 创新困难 可扩展性差 微服务间如何通讯 通讯模式角度考虑 xxx一对一一对多 同步请求响应模式,最常见—— 异步通知/请求异步响应发布订阅/发布异步响应 从通讯协议角度考虑 REST API RPC(dubbo、dubbox、motan、grpc、thrift) MQ (发布订阅模式) 如何选择RPC框架 I/O、线程调度模型(NIO、BIO、长连接、短连接、单线程、多线程、线程调度算法的性能如何) 序列化与反....

构建私有镜像仓库

私有镜像仓库 开通镜像服务 登录阿里云开通容器镜像服务。点击管理控制台-》初次使用会提示开通,然后设置密码。 点击管理 # 登录阿里云Docker Registry docker login --username=soulboy1990116 registry.cn-shanghai.aliyuncs.com # 从Registry中拉取镜像(拉取) [root@localhost ~]# docker pull registry.cn-shanghai.aliyuncs.com/abc1024/soulboy_images:flask-hello-world flask-hello-world: Pulling from abc1024/soulboy_images [root@localhost ~]# docker run -d -p 5000:5000 registry.cn-shanghai.aliyuncs.com/abc1024/soulboy_images:flask-hello-world Digest: sha256:8c4f6441a730d5abff5838....