最近学习了分布式与微服务的相关知识,由于本人也是初步接触没什么实际的经验最初也是被一大堆概念搞的云里雾里。 这两天便好好看书,上网查资料,对这两者总结了一番,希望能够给正在学习的大家解决一些疑惑。
先说说分布式,分布式只是一种手段,把不同的机器分散在不同的地方,然后这些机器间相互协助完成业务。微服务是一种特殊的分布式。
所以我们应该比较的是传统单体应用与微服务的区别。
先看看传统单体应用,下面看一张图
这就是一个大型网站的架构图,我说说这个图产生的步骤,详细可看李智慧的大型网站架构一书。
最开始一台服务器上存储着文件,数据,应用程序。随着流量的增多,瓶颈出现,应用程序需要更快CPU,数据库服务器要更大内存(缓存)和硬盘,文件服务器要更大硬盘,便将三个功能分离到各自服务器。
为了提高速度,将常用数据放到缓存中,缓存又分本地缓存和分布式缓存。
缓解服务器压力,采用集群,并通过负载均衡服务器调度不同的应用服务器。
除了缓存外仍有大量数据直接访问数据库服务器,这时便采用读写分离。
使用CDN,反向代理加速网站响应,CDN可从距离自己最近的网络提供商机房获取数据,如果反响代理中缓存着用户请求的资源则直接返回给用户。
分布式数据库,是数据库拆分的最后手段,按照不同业务拆分
业务越来越复杂采用分布式服务,传统的SOA架构。
由于服务越来越多ESB服务总线维护起来越来越麻烦,微服务便由此发展而来!
微服务
由于业务间的逻辑越来越复杂,我们就不把这些业务全部杂糅在一起,每个业务都分开来做,这就是微服务。
优点:上面的单体系统全部运行于一个进程之内,资源相互影响,添加功能可能会影响其它功能,导致维护麻烦。 而微服务一切分为不同的模块,运行于自身进程内,而且不同的服务可以使用不同的语言充分发挥优势。
缺点:引入了分布式的复杂性,如接口一致性。 不过很多问题强大的Spring Cloud都已经提供了解决方案!
下面给出一张Sping Cloud的组件架构图
未完。。。。