分布式系统的那些事儿(一)
巨石应用在如今互联网+时代逐渐淘汰,而分布式系统,集群,微服务可谓现在的流行趋势。那么近期花点时间来讲讲分布式系统吧。
什么是分布式系统,很多人一直不理解,只知道把系统分布式部署就行了,但是没有做过这样的系统,也没在里面写过代码,当然连部署都不知道,那么就更加的模糊了。
笼统而言,分布式系统从软件上来讲,对于用户来说是一个不可分割的整体。从硬件上讲就是多台独立的服务器。举个栗子,我们在访问淘宝的时候,我们不会去关心淘宝后台代码是怎么实现的,是如何部署的,我们唯一想要的就是完成购物流程,买到心仪的商品,整个过程流畅,用户体验好,网页打开快速,各方面人性化即可。而从硬件上来讲呢,用户完全不需要知道,比如在某个时候真正更新维护系统,而且却不影响用户的购物流程。就像王者荣耀那样,很多时候这个游戏在更新的时候不影响游戏,那么这就是硬件分布式做的牛逼的地方了。而很多游戏在更新的时候用户是必须要下线的。
既然有分布式系统那么肯定也会有集中式系统,浅白点讲就是文中一开始讲的巨石应用,也就是说整个软件就一个war包,所有功能都在里面,十分大,对于单台计算机的运算能力性能要求十分高。如今很多的企业级后台应用都是这样的。这样的应用显然已经不符合如今的互联网时代,所以要做SOA或者微服务进行拆分这样的工作流也是十分的巨大。而在做拆分的这个过程好不夸大的讲需要半年,甚至1年,如果再加上期间人员流动,尤其新人,在不懂业务的情况下是完全不会做的。
那么有些人会问了,现在要开发一个系统,到底是搭建分布式呢还是单一web应用呢?那么我的回答是看情况,如果预计这个系统将会承载很多的用户量,大并发质量的,那么肯定要做分布式,如果对于企业来讲,仅仅只是固定用户群体,比如特定的VIP用户,对于这样的系统设计为单一也没事。
两种系统的优缺点,显而易见了,单一应用维护起来相对简单,一个包上传重启即可。而分布式环境下对运维的能力有一定的考验。此外,单点故障的问题分布式是不存在的,单一应用的服务器挂了那么整个网站就挂了,这就是所谓的高可用。
设计分布式系统有多复杂?那么大致可以分为以下几点:
-
分布式权限如何控制,包括单点登录
-
如何从单一系统拆分为多个子系统
-
各个系统之间如何通信?RPC还是Restful?
-
如何保证系统通信的安全,如何不被拦截
-
如何保证系统的高可用
-
分布式事务如何实现?数据的最终一致性如何解决?
-
如何监控各个子系统。
-
并发的时候如何考虑全局的所有子系统?(并发一直以来都是一个很大的概念)
-
如何防范各类网络攻击
先写到这里吧,接下来的文章都会围绕分布式来讲。