天下之事常成于困约,而败于奢靡。——陆游
1 十万qps要做服务拆分吗
qps不是衡量服务化拆分的关键因素,其实有很多的因素让我们不得不做服务拆分,比如一体化架构带来的研发效率降低和研发成本提升,而且系统越来越臃肿,部署成本越来越高,在资源出现扩展性的时候力不从心等等因素让我们必须且立刻做出选择,微服务正式诞生。
2 微服务架构如何改造
- 找出依赖和被依赖的模块
- 被依赖模块形成微服务对外提供服务
- 将依赖服务分为核心和非核心功能模块
- 核心与非核心服务可以通过队列通信
- 服务之间也可以通过RPC通信
- 增加链路监控
- 增加服务治理(服务网格service mesh)
3 高并发RPC服务之间通信
- 选择一个高性能网络IO模型(epoll)
- 调试网络接口参数
- 采用protobuf或者thrift序列化协议 比json和xml高效,而且后者也提供rpc框架,前者需要配合grpc实现。
4 分布式服务注册与发现
- 注册中心可以帮助我们在动态扩容或者故障恢复以及服务优雅关闭问题方面提供动态地变更RPC服务的节点信息
- 心跳机制探测服务存活
- 保护服务过度摘除
5 负载均衡提供横向扩展
- nginx动态或者静态策略+nginx_upstream_check_module对后端服务定期探测存活
- lvs 大流量可以考虑引入
6 API网关
代替web层做一些协议转换、安全策略、认证、限流、熔断,降级等功能。使用多路I/O复用模型和线程池技术来提升网关性能,使用责任链模式来提升网关的扩展性。API网关中的线程池可以针对不同的接口或者服务做隔离和保护,这样可以提升网关的可用性。
7 引入服务网格
业界已有的Istio就很优秀,大家直接拿来用,Istio 采用一种一致的方式来保护、连接和监控微服务,降低了管理微服务部署的复杂性。
8 关注公众号
微信公众号:堆栈future