python實現微服務架構


微服務框架-nameko

1.微服務架構

微服務架構(Microservice Architecture)是一種架構概念,旨在通過將功能分解到各個離散的服務中以實現對解決方案的解耦。
它的主要作用是將功能分解到離散的各個服務當中,從而降低系統的耦合性,並提供更加靈活的服務支持。

傳統服務

優點:

①開發簡單,集中式管理

②基本不會重復開發

③功能都在本地,沒有分布式的管理和調用消耗

缺點:

1、效率低:開發都在同一個項目改代碼,相互等待,沖突不斷

2、維護難:代碼功功能耦合在一起,新人不知道何從下手

3、不靈活:構建時間長,任何小修改都要重構整個項目,耗時

4、穩定性差:一個微小的問題,都可能導致整個應用掛掉

5、擴展性不夠:無法滿足高並發下的業務需求

img

 

 

微服務

img

 

 

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()


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM