Ashon / metropolis

simple python service gateway framework based NATS messaging

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Metropolis

  • CNCF의 NATS Messge를 사용한 메시징 기반의 마이크로서비스 프레임워크
  • Written in Python

Purpose

마이크로 서비스 아키텍쳐가 전통적인 모놀리식 서비스 아키텍쳐가 가진 단점을 보완하고 있고, 그에 따라 워크로드를 더 작은 규모로 관리하기 위한 솔루션(container, orchestrator)들이 등장하게 되면서 보편적인 아키텍쳐 패턴으로 점점 자리를 잡아가고 있다.

하지만 아직까지 분리되는 마이크로 서비스들을 효율적으로 관리하기 위해서는 전통적인 모놀리식 서비스를 운영하는 경험 이외에 필요한 개념(Discovery, Governance, Service Mesh)들도 중요해지고 있다.

CNCF 생태계 도구들을 이용하여 간단한 메시지 기반의 마이크로 서비스 프레임워크를 제작해 보고, 서비스를 구동해 보면서 Cloud Native환경에서 서비스들을 좀 더 효율적으로 관리하고 개발해 나갈 수 있는 방법을 제시해 본다.

CNCF ecosystems

Orchestration - Kubernetes

컨테이너화 된 워크로드들을 분산 환경에서 효율적으로 관리하기 위한 오케스트레이터 프로젝트

Messaging Bus - Nats

Text 기반의 메시지 버스 프로젝트

Metric - Prometheus

Logging - Fluentd, Elastic Search

Tracing

Architecture Concept

Structure

  +- Cluster --------------------------------------------------+
  |                                                            |
  |  +- Node-1 --+  +- Node-2 -+  +- Node-3 --+  +- Node-4 -+  |
  |  |           |  |          |  |           |  |          |  |
  |  | Worker-a  |  |          |  |           |  | Worker-d |  |
  |  | Worker-b  |  | Worker-c |  | Worker-a  |  | Worker-c |  |
  |  |    |      |  |    |     |  |    |      |  |    |     |  |
<======= NATS ========= NATS ======================= NATS =======>
  |  |    |      |  |          |  |    |      |  |          |  |
  |  |  Gateway  |  |          |  |  Gateway  |  |          |  |
  |  |    |      |  |          |  |    |      |  |          |  |
  |  +--- | -----+  +----------+  +--- | -----+  +----------+  |
  |       +---------- Ingress ---------+                       |
  +--------------------- | ------------------------------------+
                         V

Single Workload Unit

Components

Nats

Message bus

Worker

Business Logic worker

Gateway

Service gateway

Example

Install metropolis

$ pip install metropolis

Define Worker task

from metropolis import Worker


worker = Worker(nats='nats://localhost:4222')


@worker.task(subject='foo.bar', queue='worker')
def mytask(data, *args, **kwargs):
    """Simple task which returns reverse string
    """

    return data[0][::-1]


worker.run()

Define Gateway

from metropolis import Gateway
import settings


gateway = Gateway(nats='nats://nats:4222')
gateway.app.run(host='0.0.0.0')

License

MIT

About

simple python service gateway framework based NATS messaging

License:MIT License


Languages

Language:Python 97.8%Language:Shell 1.4%Language:Dockerfile 0.8%