手无寸铁,如何强硬又体面地落地中间件

内容来源:2017 年 12 月 03 日,找钢网资深架构师刘星辰在“IAS2017互联网架构峰会”进行《手无寸铁,如何强硬又体面地落地中间件》演讲分享。IT 大咖说(微信id:itdakashuo)作为独家视频合作方,经主办方和讲者审阅授权发布。

阅读字数:2852 | 8分钟阅读

摘要

架构侧的技术组件推动困难在整个行业内是很常见的事情。不同的角色,相异的团队,大家所考虑的利益也各不相同。本次嘉宾将为大家分享如何在这种情况下优雅体面的落地中间件,以及各种技术细节。

获取嘉宾演讲视频及PPT,扫一扫下方二维码即可。

面临的问题

架构模型

一般的互联网公司的架构都是一层层向上支撑的,最底层的技术架构是上面所有层的基础,而中间件是技术架构向上支撑的一块基石。

虽然从宏观架构看,几乎找不到中间件的位置,但实际架构实现的过程中几乎都离不开中间件的支撑。因为技术向上支撑需要不同的解决方案,这些解决方案通过不断的提炼并经由代码具象化后所得到的就是中间件。

理想中落地的样子

理想的情况下我们希望架构完成后研发能够尽快的接入和上线,且运行时所有的一切都在掌握中不会出现漏洞,后续还能够着手思考下次升级。

但是实际情况下业务研发会被PR、原型以及需求等约束,第一次接入可能还没什么问题,但是后续的架构升级在业务爆发时期研发就难以理会了。

就拿找刚来说,2014年的时候我们技术开发团队还只有20多人,相互之间有什么问题都可以快速解决,但是随着之后公司的发展技术团队规模越发庞大,同时业务规模的高速发展使得研发疲于应对,很难再去配合架构的接入。

面对这种情况,我们认为两个解决方案,第一是在组织上以行政命令的方式推进。第二就是微服务,在机器上部署各种“服务”。

观测工具用法

寻找领域内潜在的问题

经过与其他公司的同行沟通调研后,我们发现所有的公司在这方面的问题主要有两点。

首先就是有大半的时间在等待接入发布,因为每个应用的发布时间完全不可控,少则两周,多达一月,也有稳定无发布的。

另外还要花费一定时间在人员沟通上,这是个很实际的问题,就像之前提到的一开始人员较少时沟通起来还是很方便的,一旦成员增加沟通难度会逐步增大,而且构成层级也会越来越深,可能要从经理到组长再到开发,甚至还有测试。

最后就会发现只剩下了很少的时间在常规工作上,来关注运行情况、收集运行数据以及依据数据继续迭代改进。

铺路爪Pavepaws

Pavepaws是一款中间件产品,用来彻底解决技术架构的升级和落地问题。它有这样几个特点,首先是无感升级,能够进行自动化部署以及动态加载。其次是三方依赖隔离,能让多版本依赖共存无冲突。最后是运行时可控,可以随时升降级和bug热修复。

铺路爪核心组件

铺路爪有4个核心组件,Java Runtime,利用Java本身的一些特性来完成类的替换和监听等机制,然后是类加载的必经之路Class Loader。接下来是字节码转换器,用来在类被实际Runtime解析前对字段、方法等进行编辑修改,它其实也是Java Runtime提供的特性。最后是影子加载器,用来挂钩ClassLoader,拦截loadClass等方法实现自由的类加载逻辑。

具体实现

正常的类加载逻辑是先由Java Runtime发起loadClass,然后再到ClassLoader。一般ClassLoader都会有自己的加载逻辑,所以需要通过ClassFileTransFormer对ClassLoader进行基于字节码的方法切面,更改原先的加载逻辑,这样的做法不仅几乎没有性能损失,还可以对任意非原生类任意方法操作。

之前的类加载中loadClass会到达ClassLoader,而现在则是到自己的加载器。我们会在服务器上设置一个专门的目录,然后配合运维提供的文件推送服务把文件推送到服务器上专用的目录中,最后由影子加载器在该目录中寻找类,一旦找到就让自身加载器处理,否则交给ClassLoader处理。这样就优先实现了自己的资源查找逻辑,同时解决了前面提到的升级问题,这时只需要让运维配合就行了。

虽然基本实现了需求,但是还存在一个问题,即第三方包的版本选择。比如针对某个第三方包我们采用了一个版本,研发方面又是另一个版本,接入时就会发生冲突,总有一方会挂掉。解决这个问题最简单的做法是遵循基本的设计原则,让实现与接口分离。

进程内的微服务

前面提到过要解决接入的各种问题可以采用微服务的方式,为此我们实现了进程内的微服务,这不仅解决了因服务器上部署的微服务过多而产生的服务治理问题,同时让研发只需使用接口而不用关心内部实现。

配置实施流程,形成闭合

到目前为止通过技术手段已经解决了一半的问题,但是还存在人员的沟通问题没有搞定。所以为此一定要有配套实施流程,首先要与QA制定中间件升级流程,将中间件升级发布与业务应用升级发布隔开。其次与运维方面做好培训,用于在突发风险时,即时关停或组件降级。然后做好流控系统为了在风险发生时,能够即时通过调整策略进行止损。最后在有了QA流程后,研发这块主要在升级前做到沟通,协调时间避免与大项目冲突。

大路朝边,各走一边

最终我们实现了业务系统与中间件发布的独立,中间件升级不在受制与业务系统的发布周期,在任何环境都可以批量进行组件升级更新操作,而让研发无感知,同时众多的应用系统能够提供更全更多的运行测试,发现未知问题。

不再需要“脸”的时代

现在我们的时间分配已经发生了变化,首先要花费5%的时间来避开大项目发布,毕竟大项目上线时,人员比较紧张,不适合操作,万一发现问题也容易影响研发人员排查。其次在人员的沟通推进上的时间减少,不在需要重复解释各种问题,只要和业务线经理沟通确认好时间,最后统一邮件告知即可。这样算下来剩下的90%的时间就能用来进行常规工作了。

以上为今天的分享内容,谢谢大家!

IT大咖说 | 关于版权

本文由“IT大咖说(ID:itdakashuo)”原创,转载时请注明作者、出处及微信公众号。投稿、约稿、转载请加微信:ITDKS10(备注:投稿),茉莉小姐姐会及时与您联系!

感谢您对IT大咖说的热心支持!

原文发布于微信公众号 - IT大咖说(itdakashuo)

原文发表时间:2018-08-30

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏全华班

如何理解软件缺陷?

软件缺陷(software defect)是对软件产品预期属性的偏离现象。它包括检测缺陷和残留缺陷。每一个软件组织都知道必须妥善处理软件中的缺陷。这是关系到...

37840
来自专栏重庆的技术分享区

IPv6部署如何影响物联网设备的安全性

原文地址:https://internetofthingsagenda.techtarget.com/feature/How-IPv6-deployment-a...

49660
来自专栏华章科技

以朋友圈为例,腾讯资深架构师揭秘鹅厂大数据平台是怎样运营的

导读:本文将从构成运营成本的主要运营资源(设备资源、带宽资源、专线资源)出发,以实际案例分别阐述精细化技术运营实施的要点。

50550
来自专栏漫漫全栈路

R.I.P. :传统整体式架构 VS 微服务

我咨询了十几个微服务项目。有些人表示,微服务真棒(这是未来!),而有些人很沮丧(谁发明了这个废物?)

15820
来自专栏SDNLAB

SDN实战团分享(十四):网络设备自动化遇到的问题与思考

我一直是做网络的,而且是大家常说的物理网工。 干了16年。虽然,刚刚毕业哪会干了几年的DBA 和SA 的工作。后来就一直在做网络。 企业网,城域网,骨干网都算是...

40560
来自专栏轮子工厂

Java必看图书籍一网打尽

对于程序员来说,个人感觉最佳学习方式是看书,视频花费时间太长,而博客则不够系统。初学相关领域最好的方式就是找到一本经典的好书,然后啃完它。 本贴子收集了几本Ja...

12770
来自专栏架构师小秘圈

1亿级PV网站架构演变

作者:叶军 来自:http://www.yejun.cn/?p=1154 一个网站就像一个人,存在一个从小到大的过程。养一个网站和养一个人一样,不同时期需要不...

68770
来自专栏企鹅号快讯

图解全宇宙最神秘团体——“程序员”的日常,是辛苦还是闷骚?

大家都知道,IT行业嘛,整天整天就是泡在电脑前,尤其是程序员们——“不是在写代码,就是在去写代码的路上”。很多程序员都以写代码为乐,当爱好和工作结合在一起的时候...

24470
来自专栏Rainbond开源「容器云平台」

如何正确地迁移到云原生应用架构

22850
来自专栏程序员互动联盟

现在学习汇编还有用吗?

不止一个人觉得汇编语言现在应用的场景太少了,还在学习这门苦涩的语言还有多大的意义,现在汇编语言有多大用途,在当前这个高级语言越来越重要的年代,学习C语言的都不多...

27820

扫码关注云+社区

领取腾讯云代金券