文档介绍:基于微服务架构改造单体
架构的实践总结
李林锋 微博、微信:Nettying
个人简介
李林锋,2007年毕业于东北大学,2008年加入华为,
从事电信软件的架构设计和开发。8年Java NIO通信
框架、网关平台和中间件设计和开发经验,精通Java
NIO、Java多线程编程和分布式服务框架等,《分布
式服务框架原理与实践》作者,目前从事云平台相关
的架构设计和开发。
公众号:Netty之家,分享Netty、服务化相关的各种案例
和实践
目录
1 传统单体架构的弊端
2 服务化架构的演进历史
3 微服务架构的实施
4 最佳实践
统单体架构的弊端
研发成本高:
Ø 代码重复率高
Ø 需求变更困难
Ø无法满足新业务快速上线
和敏捷交付
传统单体架构的弊端
运维效率低:
Ø 测试、部署成本高:业务运行在一个进程中,因此系统中任何程序的改变,都需要对整个系统
重新测试并部署
Ø 可伸缩性差:水平扩展只能基于整个系统进行扩展,无法针对某一个功能模块按需扩展
Ø 可靠性差:某个应用BUG,例如死循环、OOM等,会导致整个进程宕机,影响其它合设的应用
Ø 代码维护成本高:本地代码在不断的迭代和变更,最后形成了一个个垂直的功能孤岛,只有原
来的开发者才理解接口调用关系和功能需求,新加入人员或者团队其它人员很难理解和维护这些代码
Ø 依赖关系无法有效管理:服务间依赖关系变得错踪复杂,甚至分不清哪个应用要在哪个应用
之前启动,架构师都不能完整的描述应用的架构关系
解决对策
服务化:
Ø 拆分:对应用进行水平和垂直拆分
Ø 解耦:通过服务化和订阅、发布机制对应用调用关系解耦,支持服务的自动注册和发现
Ø 透明:通过服务注册中心管理服务的发布和消费、调用关系
Ø 独立:服务可以独立打包、发布、部署、启停、扩容和升级,核心服务独立集群部署
Ø 分层:梳理和抽取核心应用、公共应用,作为独立的服务下沉到核心和公共能力层,逐渐形成稳
定的服务中心,使前端应用能更快速的响应多变的市场需求
服务化架构的演进历史
1、MVC:解决前后端、界面、控制逻辑和业务逻辑分层问题
2、RPC:远程过程调用,本质就是分布式协作和系统间的解耦
3、SOA:服务化架构,企业级资产重用和异构系统间的集成对接
4、微服务化架构:敏捷交付、互联网、容器化发展的产物
微服务架构
定义:微服务(MSA)是一种架构风格,旨在通过将功能分解到各个离散的服务中
以实现对解决方案的解耦。
特征:
Ø 小,且只干一件事情
Ø 独立部署和生命周期管理
Ø 异构性
Ø 轻量级通信,RPC或者Restful
微服务架构的实施
微服务拆分原则:围绕业务功能进行垂直和水平拆分。大小粒度是难点,也是
团队争论的焦点。
不好的实践