假设单体软件的各模块如下,其中服务包含许多功能模块,如用户管理模块、商品模块、订单模块、仓库模块;
服务化是指对单体服务进行拆分,将一个服务软件拆分为多个相互关联的服务,他们之间相互协作,能正常完成原单体服务的所有业务。
服务化后,有如下优点:
以下是对单体服务中的服务进行服务拆分的示意图。
软件服务化后,使得软件的可用性、服务能力大大提高,然而其更多的价值在于使得软件的开发、维护更为简单。
在软件服务化后,随着软件使用的需求持续增长,依然会面临服务能力不足的问题。为了解决该问题,大家都会想到服务扩容,那么如何扩容呢?假定软件被拆分了10多个子服务,甚至更多。将所有服务都扩容一套嘛?
答案是否定的,扩容不是说说那么简单。众多子服务同时扩容,首先要面临成本问题。
一般情况下,服务扩容是根据各子服务的使用情况来指定灵活的扩容方案。对软件中服务压力大,硬件资源不足的节点进行灵活扩容。
如下是商品服务服务扩容的示意图,下图表示软件将商品服务扩增到了三个节点,这个三个节点通过负载均衡与软件中的其他服务相关协同。
商品服务以多个节点共同提供服务。这个服务群形成一个集群,即商品服务集群。
随着服务的增长,对数据库的读写需求也会持续增长。其增长趋势与服务的使用趋势成正比。
当数据库服务能力遇到瓶颈时,也可以对其进行服务扩容。
因为数据层的服务扩容首先要保证扩容后所有数据服务之间的数据一致性问题 ,因此服务的集群化和数据层的集群化通常不一样。