An approach to designing software as a suite of small services, each running in its own process and communicating with lightweight mechanisms. 这是Martin Fowler在他的论文中对微服务的定义。微服务就是一些协同工作,小而自治的服务。与微服务相对的是Monolithic(大一统)架构,将各个业务模块构建到一起,部署在同一个service中,当服务器的负载过大时,进行扩展,通常需要新的服务器,将整个应用部署上去,但这带了新的问题,负载过大时因为部分机能引起的,部署整个应用会带来性能的浪费;当某个模块需要更新时,需要打包整个应用,花费大量的时间进行部署,系统的不可用时间过长。而微服务就可以很好的回避这些问题,下图充分展示了微服务和整合系统的区别。
当然,微服务也不是银弹。采用微服务需要解决一下问题:
微服务架构可能带来过多的操作,可能需要双倍的努力。
分布式系统可能复杂难以管理。
因为分布部署跟踪问题难。
当服务数量增加,管理复杂性增加。
那么,为什么自2014年以来,微服务变得流行起来?因为一下工具解决了微服务的问题:
Docker等虚拟化工具,为微服务的部署提供了便利的条件。
Kubernetes等编排工具,为微服务的编排提供了快捷的方式,降低了部署管理的难度。
服务的易变性,实施性给微服务提供了生存空间,DevOps的发展,促进了微服务的价值。
微服务的架构过程中要实现,微服务注册与微服务发现,以及使用API网关工具来自动进行服务的负载均衡。目前,在微服务的建构方面,基于Java的Framework非常多,也相对比较完善,如Spring Boot、Spring Cloud等。Python相关的微服务框架非常少,用的比较多的是Nameko。Nameko让实现微服务变得更简单,同时也提供了很丰富的功能,比如支持负载均衡、服务发现还支持依赖自动注入等,使用起来很方便,但是有限速、超时和权限机制不完善等缺点。目前,基于Python通常会用采用 RabbitMQ 和 Nameko 来实现微服务。
环境配置
配置基于Python的微服环境,需要安装Nameko和RabbitMQ。Nameko的安装可以采用pip进行,命令如下:
pip install nameko
nameko安装完成后,需要安装RabbitMQ。在不同的系统上安装方式不同,如:
Mac上安装可以使用Brew,命令如下:
brew install rabbitmq
在Ubuntu上可以使用apt-get进行安装:
apt-get install rabbitmq-server
Windows平台,可以直接下载安装文件进行安装。更多平台的安装,请参考RabbitMQ的安装手册:https://www.rabbitmq.com/download.html。
领取专属 10元无门槛券
私享最新 技术干货