微服務架構(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()