大型网站技术架构演进与性能优化(六)六、应用架构探索:合并部署

六、应用架构探索:合并部署
1、什么是架构
业务架构抽象
面向用户的,主要考虑给用户带来什么价值、什么体验,如帮助用户完成一系列需求的集合。
应用架构
面向技术人员,如何用更低的成本更快更好地实现用户的需求,是应用架构要解决的问题。
平台(服务)架构
应用架构复杂到一定程度后,需要单独抽出一层平台架构治理层,解决业务和应用的扩展性问题,以实现业务模型抽象、灵活扩展业务能力水平、灵活定制和组装应用等功能。
技术架构
面向微观问题的,目标是用简单技术解决复杂问题,在稳定性、扩展性和性能之间取得平衡。比如采用什么开发语言、什么开发框架等。
数据架构
涉及数据模型的构建和数据库选型,数据结构的设计、数据的读写比例以及性能评估,数据的一致性、安全性以及原子性等内容。
网络(部署)架构
要解决的是网络路由、数据通信协议的优化、带宽网卡的分配、机房容灾以及网络设备的高可用等方面的问题。
组织架构
角色的分工协作以及KPI的设置,主要关注人员的执行力和效率。
2、什么是合并部署
所谓合并部署就是将多个应用系统同时部署在一个Tomcat实例中,共享同一个JVM进程,每个应用之间通过ClassLoader隔离,但是应用之间的RPC调用不通过网络,而是走Java的本地调用。
好处:充分共享CPU、内存和磁盘等硬件资源,可以让一个应用分布在多台物理机器上。
合并部署受到约束:
必须做成通用Web系统都能使用的方式,不做过多的绑定;
被合并的系统应该少而精,不吃大锅饭;
对开发完全透明;
不破坏现有系统架构;
在运维层面,要充分利用现有基础设施。
3、能解决什么问题
合并部署到底能带来些什么好处呢?
性能的提升:减少网络I/O开销,减少应用调用之间的序列化与反序列化。
协作效率的提升:允许系统进行更多的拆分,解决了不同团队之间的Owner问题。
4、如何解决
ClassLoader的加载体系
运用应用和Tomcat中间的容器实现了ClassLoader的隔离,每个Web App对应一个ClassLoader,具体细节略。
对象在不同ClassLoader间复制
ClassLoader之间的复制才能完成应用之间的数据交换,具体细节略。
日志问题
因为不同应用、模块都依赖log,具体细节略。
5、取得的效果
性能有较大提升,系统调用的RT也下降明显,被合并部署的应用主要依赖也被部署在一起了,这样它们受其他应用影响的可能性变小了。
6、更进一步地做多版本部署
什么是多版本部署?
就是在同一台虚拟机里,同一个JVM实例里、同一个tomcat实例里同时跑一个应用的多个版本,从此应用的发布不需要重启JVM,回滚只需要切换流量而不需要替换代码。
如何实现代码的热替换?
需要解决两个关键问题:一是执行完成的线程能正常退出;二是对象和class类以及操作系统申请的资源能被回收。
多版本带来的好处:大大提升了应用的发布效率和回滚效率。
7、关于高密度部署的思考
不管是不同应用的合并部署还是单应用的多版本部署,本质都是以在单台机器上部署更多的应用为目的,理论上虚拟化越在上层实现,所能共享的资源就越多,但是要同时考虑应用的维护成本和机器成本,找到平衡点。
是否是高内聚:边界是否清晰,参与人之间的信息交流是否简单明了,沟通成本是否足够低,否则很难推广和执行。
是否容易工程化:操作流程简单易学,实施门槛低;可以大规模被复制,依赖少兼容性强;传播方便,可以被弹性调度。
8、总结
通过合并部署原本联系比较紧密的应用系统,减少他们之间的RPC调用,并最终提升系统的性能。所谓合并部署并不是真正的系统合并,系统的开发态仍然是独立的,只是线上运行时部署在同一台机器上,所以不会影响开发效率,但是对运维会有一些影响。是否做合并部署需要进一步考虑和评估系统的运行时系统资源的隔离问题。

你可能感兴趣的:(系统架构,性能优化)