微服务

优点

  • 每个子业务独立部署,不会互相影响
  • 每个子业务可以使用不同的开发语言

grpc和protobuf

  • gRPC 是谷歌开源的轻量级 RPC 通信框架,其中的通信协议基于二进制数据流,支持 HTTP 2.0 协议,还可以为通信双方建立持续的双向数据流
  • protobuf 两个微服务之间通过基于 HTTP 2.0 二进制数据帧通信,那么如何约定二进制数据的格式呢?答案是使用 gRPC 内置的 protobuf 协议,其 DSL 语法 可清晰定义服务间通信的数据结构

docker容器

多个容器共享宿主主机的 kernel,多个容器之间相互隔离

服务发现

它作为一个注册中心会记录每个微服务的 IP 和端口,各微服务上线时会在它那注册,下线时会注销

1
2
go get -u github.com/micro/protobuf/proto
go get -u github.com/micro/protobuf/protoc-gen-go

微服务的优点

  • 各个子模块互相独立,可以选用不同的技术栈,独立开发和维护。
  • 故障隔离,一个服务挂掉不会影响其他服务。

微服务的缺点

  • 数据一致性
  • 事务问题
  • session一致性问题
  • 锁问题
  • 单个服务不可用导致整个系统崩溃(熔断器)
  • 不同开发团队需要紧密协作。
  • 定位问题难,问题日志可能分布在多台nginx上
  • 系统变得更加复杂,运维也是个问题。

如何保障微服务架构下的数据一致性?

https://www.cnblogs.com/mahatmasmile/p/8530077.html
CAP理论,c一致性,a可用性,p分区容错性
具体表现为在一定时间内,可能模块之间数据是不一致的,但是通过自动或手动补偿后能够达到最终的一致。
二阶段提交协议
可靠消息最终一致性

  • 上游应用将本地业务执行和消息发送绑定在同一个本地事务中,保证要么本地操作成功并发送 MQ 消息