当你开始考虑分布式架构的时候,可能有两个主要原因,第一个原因可能是你的系统用户数或者业务量持续增长,你已经开始担心一台服务器是否能够支持业务的增长。你开始考虑分布式架构是因为分布式架构可以支持多台服务器分担用户的请求或者大量数据的存储,它带来的横向可扩展性让你在业务量高速增长的时候可以高枕无忧,当你的服务快支撑不住的时候,你只要花钱买机器就行,能用钱解决的问题都不是问题。另外一个原因可能是你的用户高度依赖你的系统,系统一旦停机,会给用户造成很大的影响甚至损失,所以你想让多台机器同时工作,即使一台机器挂了,其它机器还能继续提供服务,这样你就不用担心半夜被用户叫醒了。
还记得前年参加QCon的时候,最火的分会场就是微服务了,不仅座无虚席而且站无虚席。当你考虑微服务的时候,可能是因为你开始忍受不了笨重的系统、落伍的技术栈、牵一发而动全身的高耦合等问题,微服务的主要目标是实现整个系统各个模块之间的高内聚和低耦合,主要手段是把一个大的应用拆成很多相互独立的微服务,每个微服务都运行在自己的进程里,通过web service, https或者消息队列和其它服务进行交互,当我们改动一个服务的时候不会影响整个系统。
还记得去年参加谷歌开发者大会的时候,最热的话题当属Tensorflow,当你开始考虑机器学习的时候,说明你已经意识到它已经是当下最热的技术,现在如果你的系统没有一点机器学习的能力,都不好意思拿出来卖。那怎么才能在现有的架构中加入机器学习的技术呢?我们可以通过加入四个微服务来实现:
- 特征抽取服务,主要职责是把历史业务数据转化成能作为机器学习输入的特征数据。
- 模型训练服务,主要职责是训练历史特征数据,产生机器学习模型。
- 模型预测服务,利用训练好的模型对输入的特征数据生成输出。
- 模型监控服务,监控预测结果和实际结果的差异,可视化模型的质量。
最后小结一下,分布式架构主要解决了扩展性和高可用性两个问题,微服务解决了大型系统中模块之前的耦合问题,机器学习是当下最热的技术,三者完美结合的架构一定很美很强大。