通常所讲的系统架构,一般是针对具有一定规模的分布式系统来讲的,如果系统只布署在一台服务器上,讲系统架构,就有点小题大作了。作为一名程序员,工作了一定的年限,有了一定的成长之后,要往更高的方向发展,就需要去考虑一些系统架构方面的问题,不然,到了34岁被退休,不委屈你!那么,要讲一个新东西,通常可以从问题开始讲起,我们先来看两个问题:
1. 一个公司,刚刚成立,自然做什么事都要考虑成本,然后数据库使用的是免费开源的MySQL,服务器也就那么几台。随着公司的不断发展和壮大,公司的服务器扩充到了1000台,公司也有钱了,于是就想着使用Oracle数据库。怎么切换,一台一台服务器连上去改配置文件么?如果切换的过程中,出了问题,又一台一台地改回去?
2. 一个电子商城系统,订单服务是分布式的,有10台服务器。某一天,通过查看线上数据库,发现有一个订单异常,这个时候,程序员需要排查这个问题,通常第一步是去查看服务的日志。那么问题来了,有10台服务器,怎么知道这个订单是哪台服务器处理的?一台一台服务器连上去查么?如果有100台服务器呢?
这两个问题,只是架构设计问题中的冰山一角。一个系统架构的设计,就是为了解决一系列的问题的,甚至可以这么理解,一个系统架构,就是一个解决方案,用于解决一些特定的问题而存在。第一个问题体现出来的,就是系统的易维护性,第二个问题体现出来的,就是系统的可操控性。那么,要解决这些问题,该怎么来设计系统的逻辑?
人类经过几千年的发展,社会架构不论怎么演进,一个国家,都需要有一个最高管理者。一个国家的省市(州县)都要服从这个管理者的调度,这样,一个国家才能有序地发展。但是,不同的国之间,因为没有一个统一的管理者,所以就会摩擦不断,甚至爆发战争。小到一个公司,也是一样,需要有一个最高的管理者,这样,公司才能有序地发展。当然,这样的组织形式,弊端也很明显,如果管理者的方向走偏了,那么,其下的所有成员,都要跟着走偏。所以,选择一个合适的管理者,就显得尤为重要。同样,在我们的程序中,设计一个好的架构,自然也是意义非凡。
基于此,我们的构架需要分成两部分,一个是控制部分,暂且叫控制台吧,一个是服务部分,暂且叫服务。控制台,就类似于管理者,对所有服务的运行起着决定作用,每个服务怎么运行,由控制台决定。而每个服务,除开架构部分的逻辑,就是用户自己部署的一个一个的服务。用户部署的服务,需要的配置信息,全部放在控制台,进行统一的管理。而在这些配置信息里面,有些应该是公共的配置信息,比如,用户可以部署各种各样的服务,但连接的数据库都是同一个,所以就可以把数据库连接的配置做成一个公共的配置,当然,这是一些细节上的处理。然后,各个服务启动的时候,第一步,先走架构部分的逻辑,就是连接到控制台,进行注册,告诉控制台,我是什么什么服务,控制台就会把相应的配置信息下发给服务,服务端获得了相应的配置信息之后,根据这个配置信息提起用户部署的服务。而服务一旦注册成功,服务的地址信息,就会在控制台进行保存。控制台根据保存的地址列表,对用户自己部署的服务,进行负载均衡,处理客户端的请求。这样,对整个系统做出管理,只需要管理控制台就可以了。同时,对外暴露的服务,也就只有控制台了。当然,最好是在控制台前面,再加一道防护,控制台实在是太重要了,直接暴露不是很好。或者是弄双控制台,管理服务一个控制台,处理客户端请求用另一个控制台。当然,这又是涉及到具体实现的细节问题了。
这篇博文,只是从一个大的方向,简要的说了一个架构的实现理论,具体实现的时候,肯定还会涉及到各种各样的问题。那就不是一两篇博文能够说得了的了。
声明一点:我是一个测试,不是程序员!
欢迎加入测试群:91425817,一起讨论测试的那些事。