- Akka实战:快速构建高可用分布式应用
- 杜云飞
- 2字
- 2025-04-04 08:24:03
前言
为何写作本书
在大力提倡互联网+的今天,人们在PC、手机、Pad上安装了各式各样的软件服务或APP,享受着互联网技术带来的高效和便捷。同时,随着这些产品的高速发展,用户规模急剧扩大,系统承载能力会逐渐达到瓶颈,一些早期不常出现的问题也会慢慢浮出水面。实际上,系统开发者们也越来越重视软件的稳定性、高可用性、可扩展性对用户体验的影响,大家纷纷使出浑身解数,实践出多个构建大型应用所需要的技术架构。在这些架构方案中,有几个词始终不绝于耳,那就是:“高并发”“分布式”“高可用”。
对于很多工程师来讲,这几个词可谓“既爱又恨”。“爱”是因为大家都希望能掌握大型分布式系统架构所涉及的各个知识点。这样,大家在实现产品不断迭代更新,并持续服务好用户的同时,也能够进一步提升自己的技术实力和技术视野,可谓“产品”和“技术”共同成长。“恨”是因为很多产品并没有机会“跑”成大型系统,工程师们也就没有机会去解决大型系统才会出现的可扩展性问题,再加上目前市面上的一些分布式架构解决方案确实都存在不小的门槛,让大家认为任何分布式系统(学习起来)都是如此复杂。从某种程度上,这些都限制了工程师的自我提升。后来,我有幸接触到了一些较大型的系统,也逐渐开始承担起技术选型的工作,以我的经验来看,当你对整个系统架构有一定决策权的时候,就必须考虑你所选的架构是否足够稳定、可控、可依赖,更直白点说,即是否足够“简单”。因为只有简单的东西,才是可控的、低风险的。所以在当时,我所有的技术选型都以“简单”作为出发点,不希望将事情做得更复杂。就在我们打算为某个业务产品实现一套实时数据处理系统时,我接触到了Akka框架,在经过初步的了解后,我们开始尝试搭建Demo工程。最初我们只需要一个足够简单的单机程序,不用考虑太多的可扩展性问题,而Akka在单机上的并发性能也足以支撑我们当时的业务需求。但随着产品不断迭代和更新,数据处理所需要的系统资源突破单机的瓶颈,这时就不得不对其做水平扩展,即分布式&集群。我们发现,使用Akka做这类扩展是如此简单,无论是单机还是分布式,它都提供了统一的编程模型,这正好符合我的“简单”原则。Akka并非大型项目才可以使用,只要场景合适,它可以从“小”用到“大”。所以当你想要学习一门简单够用的分布式并行框架时,可以从Akka开始。
Akka虽然好用,但是在国内的知名度并不高(特别是和Java界的那几座大山相比)。我个人认为,出现这样的情况,可能有两个原因:一是Akka是基于Scala开发的,虽然同为JVM上的语言,也提供了Java API,但是Scala还略显小众(语言本身还是挺棒的),大家接受度不高;二是Akka的中文资料非常匮乏,这让很多工程师学习起来比较吃力,并且在出了问题后,不太容易找到合适的解决方案。我曾有幸被好几家企业邀请做一些这方面的技术咨询和培训,期间和小伙伴儿们一起踩过不少坑,但是总算爬出来了(笑),并且还留下了一些自己做的笔记和资料,所以就想写一本Java版的Akka书籍,也算是为普及Akka框架做点小贡献。再后来,一个偶然的机会认识了机械工业出版社的杨福川老师,了解了书籍出版的相关事宜,在他的鼓励下,我开始走上写书的道路。
写书对我来讲,远比写代码要困难得多。写代码时,我只需要考虑当前业务场景下的功能实现,并且对于技术的运用更多靠的是一种习惯——觉得该这么写,不用考虑“why”,也不用考虑具体的细节。但写书需要更加全面地了解整个框架结构,将零散的知识“点”串成一条“线”,然后连成一个个知识“面”。虽然以前我有记笔记和写博客的习惯,但是要把这些整合成一本书,还是花费了不少精力。另外,写作时间对我来说也是个问题。在决定要写这本书时,我正处于独立创业中,并且刚从上一个项目中抽出身来,时间相对来说比较充裕,所以趁热打铁,很快交出了第一稿。正当我为自己的写作进度感到开心时,一个新的创业机会向我招手了,然后我来到了现在这家公司。加入新公司后,我几乎把所有精力都投入到新产品的研发和管理工作上,所以写书一事也只能暂缓了。在这期间,我一直得到家人、朋友,包括福川老师的支持和鼓励,我对完成本书的愿望也越来越强,所以不敢(也不想)有任何懈怠,一直尽可能挤出空闲时间用于写作。终于,在搭上了多个“不那么忙”的周日后,我完成了本书。