分布式系统产生背景:
在互联网还没有现在这么方便的时候,所以很多公司的业务线都是垂直架构,如LAMP。由于各个公司的业务比较简单,需要处理的用户数据也相应较少,所以简单易上手的垂直架构还能很有效地支撑各个公司的业务发展。但是随着互联网的普及移动互联网的发展,需要处理的用户数据得到了爆炸性的增长。而且为了同时服务于手机app和自助终端机等渠道的业务,各种新的需求层出不穷。在不断地迭代升级的过程中,之前提到的公司垂直应用架构慢慢就演化成了一个个的巨无霸应用。系统变得臃肿庞大,业务错综复杂。一旦有新的需求到来,牵一发而动全身。不仅系统可能有很多地方需要同时修改(比如一个访问mysql的接口,可能在代码里到处都是),而且整个系统都需要经过严格的测试才可以上线。开发效率低下,修改成本越来越高,测试周期越来越长,而bug越来越多。更让人头大的是,一旦之前维护这个项目的人员发生变动,新顶替上来的同事需要很长的时间才能把整个系统弄个半懂。所以垂直型巨无霸应用已经在大流量和高并发的冲击下,越来越力不从心。
这时候的解决办法便是,对复杂的巨无霸应用进行水平拆分。把公共业务包装成服务提供出来,把各个相关业务封装成子系统也提供出接口。达到降低代码耦合,公共业务复用的目的。由于子系统和子系统之间已经进行了解构,所以一些业务可以通过简单的加机器进行水平扩容来应对高并大和大流量。每个子系统的修改基本不会影响到其他子系统的稳定性,测试也不需要把整个系统拉过来全部测试一遍,提高了系统更新迭代的效率。
分布式系统中存在的问题:
在当前数据体量巨大的情况下,可以看出分布式业务系统的优势很明显。但是同样,分布式系统给我们带来了其他的一些问题和挑战。常见的问题有很多,我只列觉我目前遇到的一些问题,供大家参考:)