微服务架构(Microservice Architecture)是一种架构概念,旨在通过将功能分解到各个离散的服务中以实现对解决方案的解耦。
它的主要作用是将功能分解到离散的各个服务当中,从而降低系统的耦合性,并提供更加灵活的服务支持。
传统服务
优点:
①开发简单,集中式管理
②基本不会重复开发
③功能都在本地,没有分布式的管理和调用消耗
缺点:
1、效率低:开发都在同一个项目改代码,相互等待,冲突不断
2、维护难:代码功功能耦合在一起,新人不知道何从下手
3、不灵活:构建时间长,任何小修改都要重构整个项目,耗时
4、稳定性差:一个微小的问题,都可能导致整个应用挂掉
5、扩展性不够:无法满足高并发下的业务需求
微服务
2.nameko介绍
nameko 是python语言的一个微服务框架,支持通过 rabbitmq 消息队列传递的 rpc 调用,也支持 http 调用。
pip install nameko
3.mq安装
docker pull rabbitmq
docker run -d --hostname my-rabbit --name rabbit -p 15672:15672 -p 5672:5672 rabbitmq
docker ps
docker exec -it 镜像ID /bin/bash
docker exec -it 0887cb8e133c /bin/bash
rabbitmq-plugins enable rabbitmq_management
用户名密码:guest
4.rpc服务端代码
#新建service.py
from nameko.rpc import rpc
class service:
name = "service"
@rpc
def hello(self, name):
print("hello")
return "Hello, {}!".format(name)
5.调用
#新建get_service.py
from nameko.standalone.rpc import ClusterRpcProxy
CONFIG={'AMQP_URI':'amqp://guest:guest@localhost'}
def compute():
with ClusterRpcProxy(CONFIG) as rpc:
res = rpc.service.hello('adf')
print(res)
if __name__=='__main__':
compute()
6.启动服务
nameko run service --broker amqp://guest:guest@localhost
7.批量启动service
import eventlet;
eventlet.monkey_patch()
import importlib
from pathlib import Path
import os
path = os.path.dirname(__file__)
def run_all():
services = {}
for dir_path,dir_names,file_names in os.walk(path):
for filename in file_names:
if filename.endswith("service.py"):
name,ext = os.path.splitext(filename)
service = importlib.import_module(name)
services[name] = service
from nameko.runners import ServiceRunner
runner = ServiceRunner(config={"AMQP_URI": "amqp://guest:guest@localhost"})
for name, service in services.items():
cls = getattr(service, name)
runner.add_service(cls)
runner.start()
runner.wait()
if __name__=='__main__':
run_all()