服务化探索
姓名:程成
标题示意位置
姓名示意位置
1861234567
概 览
· 传统软件架构面临的常见问题
· 服务化的优点
· 服务治理
· 服务化的外延
· 解决之道-服务化
· 服务化需要改善解决的问题
· 互联网公司怎样落地服务化
标题示意位置
姓名示意位置
1861234567
传统软件架构面临的常见问题
你是否遇上过?
新到公司,这么大个系统,我可怎么入手
呀?
听说小明明天要上线新功能,而且还改了
表结构,xxx! 看看自己负责的模块受到
了影响吗?
。。。
标题示意位置
姓名示意位置
1861234567
传统软件架构面临的常见问题
实例—截取自uber官网博客
As core domain models grew and new features were
introduced, our components became tightly coupled, and
enforcing encapsulation made separation of concerns difficult.
Continuous integration turned into a liability because
deploying the codebase meant deploying everything at once.
Our engineering team experienced rapid growth and scaling,
which not only meant handling more requests but also
handling a significant increase in developer activity. Adding
new features, fixing bugs, and resolving technical debt all in
a single repo became extremely difficult.
标题示意位置
姓名示意位置
1861234567
传统软件架构面临的常见问题
耦合度高
由于传统软件架构多以monolith的形式存在,使得系统的耦合度非常的高,常常给我们
带来了很多的困扰:
1、可扩展性不强(受资源限制)
2、系统结构复杂,稳定性差
3、优化难度大
4、行动迟缓(降流,限流)
5、维护成本高
6、部署效率低
7、ci问题多
8、api版本控制等问题
9、技术栈受限
10、容易累积技术债务
。。。
标题示意位置
姓名示意位置
1861234567
寻求解决之道
我们要拥抱 我们要逃离
标题示意位置
姓名示意位置
1861234567
解决之道
标题示意位置
姓名示意位置
1861234567
解决之道-服务化
老板:怎么解决?
可以参照大公司的发展历程:
国外:twitter、amazon、airnb
国内:阿里、微博等
。。。
标题示意位置
姓名示意位置
1861234567
解决之道-服务化
Twitter架构历程
Ruby单体应
用
各种问题涌
现
标题示意位置
姓名示意位置
1861234567
解决之道-服务化
淘宝架构历程
php单体应用 Java分层应用
HSF,NOTIFY
服务化之旅
标题示意位置
姓名示意位置
1861234567
解决之道-服务化
互联网公司的常见发展流程
大一 统
业务系统
服务调用,
一定的治理
细化 业务
系统
标题示意位置
姓名示意位置
1861234567
解决之道-服务化
具体解耦措施
分而治之。将复杂的系统分层的进行垂直切分,使其成为各个独立的业务模块
数据独立。对于有状态的数据,不能进行共享。
公共服务抽取。将业务需求的公共功能全部抽取为独立的功能服务
软负载。为后续扩展打开坚实之道
迪米特法则。功能拆分受领域模型和迪米特法则影响。
标题示意位置
姓名示意位置
1861234567
解决之道-服务化
Soa(面向服务的体系结构)
面向服务的体系结构是一个组件模型,它将应用程序的不同功能单元(称为服务)通过
这些服务之间定义良好的接口和契约联系起来。接口是采用中立的方式进行定义的,它
应该独立于实现服务的硬件平台、操作系统和编程语言。这使得构建在各种各样的系统
中的服务可以使用一种统一和通用的方式进行交互。
而近年来被讨论的很多的微服务,也跟soa的概念相吻合
标题示意位置
姓名示意位置
1861234567
服务化的优点
标题示意位置
姓名示意位置
1861234567
服务化的优点
1、高内聚,低耦合。
2、稳定性得到保证。主要指核心服务
3、资源利用率提高,
4、行动步伐变快,独立部署、测试、交付、升级、扩展、替换等
5、优化变得相对独立,简单
6、代码的复杂度简化,可控性增强
7、持续交付的时间周期变得更小
8、维护成本降低,重构优化简便
9、可选技术栈更为丰富,可支持异构系统
。。。
标题示意位置
姓名示意位置
1861234567
服务化带来的问题
标题示意位置
姓名示意位置
1861234567
服务化带来的问题
1、问题排查难度增大
2、事务支持不友好
3、系统的整体SLA不可控
4、监控系统难度变大
5、服务治理难度较大
6、独立服务测试简化,整体测试变难
7、部署复杂度变高
8、测试环境稳定性要求较高
9、rpc会面对很对复杂的网络问题,应用的幂等性问题
。。。
标题示意位置
姓名示意位置
1861234567
服务治理
标题示意位置
姓名示意位置
1861234567
服务化的落地
标题示意位置
姓名示意位置
1861234567
服务化的落地
DNS
代理(中心化/非中
心化)
服务自动注册与发
现
代理 +自动发现
agent
标题示意位置
姓名示意位置
1861234567
服务化落地方案的优缺点
1、DNS
2、代理
3、自动发现
4、代理+自动发现
标题示意位置
姓名示意位置
1861234567
常见服务化框架的原理(参见dubbo)
标题示意位置
姓名示意位置
1861234567
服务化框架实例
标题示意位置
姓名示意位置
1861234567
服务化体系
标题示意位置
姓名示意位置
1861234567
Agent测试的整体概况
标题示意位置
姓名示意位置
1861234567
服务化的外延
标题示意位置
姓名示意位置
1861234567
服务化框架实践心得
1、规范先行,最好支持中间idl文件
2、网络处理能力(事件驱动,io复用,异步支持,长短链接等)
3、服务注册,发现等资源的统一定义,如url的方式
4、负载均衡算法
5、容错(网络,调用,幂等性)
6、降级,限流
7、监控、分析、扩展 等等