微服务概念与演进

巨石架构到微服务的演进

传统网页应用虽然进行了模块化设计,但是最终仍然是打包成一个war包进行部署,启动慢,无法拓展,可靠性很低。

什么是微服务

是面向服务的架构模式(SOA)的最佳实践。
定义:围绕业务功能构建的,服务关注单一业务,服务间采用轻量级的通信机制,可以全自动独立部署,可以使用不同的编程语言和数据存储技术。微服务架构通过业务拆分实现服务组件化,通过组件组合快速开发系统,业务单一的服务组件又可以独立部署,使得整个系统变得清晰灵活。

如何实现微服务

组件服务化,例如在Go中实现需要:
kit:一个微服务的基础库(框架)
service:业务代码 + kit 依赖 + 第三方依赖组成的业务微服务
RPC + message queue:轻量级通讯
按业务组织服务,常见的模式:大前端(移动/Web) > 网关接入 > 业务服务 > 平台服务 > 基础设施(PaaS/Saas)

微服务的优点和缺点

优点:原子服务、独立进程、隔离部署、去中心化服务治理。

缺点:基础设施的建设、复杂度高。
固有的复杂性:① 必须使用RPC或者消息传递实现进程间的通信,处理通信慢与局部失效的问题;② 不同服务可能使用不同数据库。

要搞定这些缺点,需要做怎样的基础设施建设

做什么事情–可用性设计、API设计等引申话题

微服务组件

微服务设计中常见的角色

三大组件:API Gateway、BFF层、底层服务Microservices。
API网关分层:

  • 流量入口:协议转换/路由分发
  • 安全边界:统一认证/权限控制
  • 流量治理:限流熔断/日志监控

BFF适配层:为不同终端提供定制化API
CQRS模式:读写分离(通过binlog实现数据同步)

演进过程

Microservices拆分:

  1. 按垂直功能性能角度,含久必分分久必合
  2. 可以考虑中间加一层(例如统一接入账号)
  3. 按照业务领域抽象(DDD)
  4. 按照功能拆分:CQRS,应用程序分为命令端和查询端。

安全问题

外部的安全保障:API Gateway统一认证拦截 -> BFF校验Token -> Service

服务内部的安全保障
① 认证:知道是谁调用的;
② 授权:RBAC,控制能访问哪些接口。

信任等级:Full/Half/Zero Trust。

gRPC

概念

A high-performance, open-source universal RPC framework. 高性能开源框架。
特性

  1. 支持多语言;
  2. 序列化支持Protocol Buffer和Json;
  3. HTTP/2多路复用。

其中最重要的是标准健康监测协议,应用如下:
应用1:服务稳定与不稳定时摘除与恢复;
应用2:外挂容器健康检测;
应用3:生产者与消费者之间的检测;
应用4:平滑发布。

服务发现的模型

① 客户端发现(微服务的核心是去中心化,用这种更好);
② 服务端发现(如果服务很大,可能用service mesh)。

多集群与多租户

多集群

why?——单集群坏处:一般布N+2来冗余节点。出现故障时后果严重。
how?——物理上两套资源,逻辑上维护cluster概念。
好处?——不同集群使用多套独占的缓存,性能好。
坏处?——缓存命中率下降,不同业务形态数据正交。
拓展:从全集群中选取一批节点(子集),利用划分子集限制连接池大小。——子集算法。

多租户

why?保障代码隔离性,基于流量租户做路由决策。
问题:[并行测试]时混用环境不可靠,而多布环境成本高,也难以做压测。
解决方法:染色发布,基于流量类型做路由。本质是从源头传递一个标签,挂在go的上下文中,基于RPC负载均衡的流量做路由,路由到指定的节点。

参考资料:
https://microservices.io/index.html
https://blog.csdn.net/mindfloating/article/details/51221780
https://www.cnblogs.com/dadadechengzi/p/9373069.html
https://www.cnblogs.com/viaiu/archive/2018/11/24/10011376.html
https://www.cnblogs.com/lfs2640666960/p/9543096.html
https://mp.weixin.qq.com/s/L6OKJK1ev1FyVDu03CQ0OA
https://www.bookstack.cn/read/API-design-guide/API-design-guide-02-面向资源的设计.md
https://www.programmableweb.com/news/how-to-design-great-apis-api-first-design-and-raml/how-to/2015/07/10
http://www.dockone.io/article/394
https://www.jianshu.com/p/3c7a0e81451a
https://www.jianshu.com/p/6e539caf662d
https://my.oschina.net/CraneHe/blog/70317
https://my.oschina.net/CraneHe/blog/703169
https://my.oschina.net/CraneHe/blog/703160

学习笔记,侵删。