1.微服务
1.1.什么是微服务
将一个复杂的单体式服务进行合理的拆分,分成多个子服务,服务与服务间通过松耦合的形式交互
1.2微服务的优势
优点:
单一职责 可扩展 灵活组合 高可靠 对技术栈更包容 新人熟悉接管服务代码更容易,降低了维护成本,每个微服务有自己的数据库,每个数据库进行一个分表(甚至同时分库分表),相对于单体应用增加了服务的吞吐量
降低了服务的耦合
缺点:
运维成本高、复杂度高、影响性能
拆分的复杂度不好把握,一般是按照功能模块去拆分,由架构师指导我们进行拆分工作;微服务提升了系统的复杂度,部署维护成本更高,需要多个成员直接协作
1.3微服务需要解决的问题
服务注册、服务发现、负载均衡、健康检查、熔断、限流、部署、降级、监控和告警、调用链(链路追踪)
2.微服务需要解决的问题
高可用 高性能 高并发
2.1服务注册和发现(consual)
2.1.1客户端的服务注册与发现 (客户端与微服务的注册发现)
网关直接去找服务地址
2.1.1服务端的服务注册和发现 consul (微服间的注册发现)
先要去找负载均衡器(LB),然后去找到服务器地址
2.2 负载均衡
(让每个服务实例都能被访问,流量平衡) :
2.3 健康检查
(检查某个服务是否还存活,定时检查一遍)
2.4 重试机制
2.5 熔断
超过系统能承受的最大流量,直接返回,保护核心功能服务不受影响
2.6限流
限制流量(比如秒杀系统什么的)(前端和后端都要进行限流)
2.7部署
容器化,全部上k8s
2.8降级
在其内部暂时舍弃对一些非核心的接口和数据的请求,而直接返回一个提前准备好的fallback(退路)错误处理信息
2.9监控和告警:服务问题通过一些即时通讯工具告知开发和运维人员
2.10调用链(链路追踪):服务之间的调用关系,排查问题
2.11 网关:通过网关进行客户端流量的分发,请求落到具体的微服务
服务注册与发现组件管理服务的上线和下线,服务的地址的查找,微服务和管理服务组件的长链接通信确保服务存活
可以保持长链接
2.12服务间数据的同步:微服务间数据同步有(主要分为同步和异步)
restfulapi :(http1.1)同步通信
rpc :内部服务通信(http2.0 同步过程调用)
mq: 可以异步通信
2.grpc
2.1什么是grpc
远程过程调用,定义一个服务,指定其可以远程调用的方法,在服务端实现这个接口,并启动一个grpc服务来处理客户端的调用,在客户端拥有一个存根能够像服务端一样的方法。
在 gRPC 里客户端应用可以像调用本地对象一样直接调用另一台不同的机器上服务端应用的方法,使得您能够更容易地创建分布式应用和服务
2.2允许定义四类流式方法:
单项rpc 、服务端流式rpc、 客户端流式rpc 、双向流式rpc
2.3grpc优势
1.解决不同语言级及环境之间的通信
2.基于http2.0通信 在应用层跟传输层之间增加了一个二进制分帧层
HTTP 2.0会将所有传输的信息分割为更小的消息和帧,
并对它们采用二进制格式的编码;压缩请求头和响应头;
单tcp连接多路复用;服务器可以主动推送资源给客户端
3.使得应用程序之间可以进行通信
4.gRPC可以通过protoBuf来定义接口,从而可以有更加严格的接口约束条件
5.通过protoBuf可以将数据序列化为二进制编码,这会大幅减少需要传输的数据量,从而大幅提高性能。
6.gRPC可以方便地支持流式通信
3.Protocol Buffers
3.1什么是Protocol Buffers
Protocol Buffers是Google定义的一种跨语言、跨平台、可扩展的数据传输及存储的协议。主要是用于内部服务
3.2优点
1.因为将字段协议分别放在传输两端,传输数据中只包含数据本身,不需要包含字段说明,所以传输数据量小,解析效率高(编解码效率高)。
2.支持多种语言
3.相比于json和xml,它表达同样的数据可以达到一个3到10倍的压缩效果
4.字段编号,有助于向后兼容
3.3缺点
二进制格式导致可读性差,版本维护成本,缺乏自描述,通用性差
对于浏览器环境编译代码体积较大,因为预先加载数据的序列化和反序列化方法,会导致需要加载额外的js代码。
3.4什么情况下考虑json
1.希望代码可读性更强
2.带宽不足以增加更多的开发工具
3.运行不同类型的网络服务带来的工作负荷已经过大
4.服务端应用是基于js开发的
5.浏览器直接面向服务拿数据
4.设计微服务遵循的原则:
转载
链接:https://www.jianshu.com/p/86a0db11ecd2