优点
- 每个子业务独立部署,不会互相影响
- 每个子业务可以使用不同的开发语言
grpc和protobuf
- gRPC 是谷歌开源的轻量级 RPC 通信框架,其中的通信协议基于二进制数据流,支持 HTTP 2.0 协议,还可以为通信双方建立持续的双向数据流
- protobuf 两个微服务之间通过基于 HTTP 2.0 二进制数据帧通信,那么如何约定二进制数据的格式呢?答案是使用 gRPC 内置的 protobuf 协议,其 DSL 语法 可清晰定义服务间通信的数据结构
docker容器
多个容器共享宿主主机的 kernel,多个容器之间相互隔离
服务发现
它作为一个注册中心会记录每个微服务的 IP 和端口,各微服务上线时会在它那注册,下线时会注销
1 | go get -u github.com/micro/protobuf/proto |
微服务的优点
- 各个子模块互相独立,可以选用不同的技术栈,独立开发和维护。
- 故障隔离,一个服务挂掉不会影响其他服务。
微服务的缺点
- 数据一致性
- 事务问题
- session一致性问题
- 锁问题
- 单个服务不可用导致整个系统崩溃(熔断器)
- 不同开发团队需要紧密协作。
- 定位问题难,问题日志可能分布在多台nginx上
- 系统变得更加复杂,运维也是个问题。
如何保障微服务架构下的数据一致性?
https://www.cnblogs.com/mahatmasmile/p/8530077.html
CAP理论,c一致性,a可用性,p分区容错性
具体表现为在一定时间内,可能模块之间数据是不一致的,但是通过自动或手动补偿后能够达到最终的一致。
二阶段提交协议
可靠消息最终一致性
- 上游应用将本地业务执行和消息发送绑定在同一个本地事务中,保证要么本地操作成功并发送 MQ 消息