Dapr+k8s+알파제로

현재 해미배의Saas기업은 실습생으로서 보살핌을 받았지만, 그 개인개발을 연수할 기회가 있기 때문에 Dapr으로 오세로를 개발했습니다!

제품

  • 컴퓨터와 맞붙을 수 있는 오세로
  • 선공/후공, 컴퓨터 레벨(1~3)
  • 선택 가능
  • 2인 대결 불가
  • 언어

  • Dapr
  • Kubernetes
  • gRPC
  • React
  • Go
  • Python
  • Dapr이란


    마이크로 서비스로 응용 프로그램을 간단하게 구축할 수 있는 소프트웨어다.나는 이것이 Istio 등(인터넷) 서비스점포와 같은 기능을 가지고 있다고 생각하지만 공식.에 따르면 서비스점포와 다른 것 같다.여러 가지 편리한 기능이 있지만 이번 개발에서 서비스 간의 통신은 Dapr의 주요 역할이다.

    개요


    서비스의 전체적인 상황은 아래 그림과 같다.
  • Front (React)
  • User/CP 전환 등 게임 진행
  • 선공, 후공, CP 레벨 등 게임 설정
  • CP (Python)
  • 컴퓨터
  • Board (Go)
  • 디스크 업데이트(반전이나 돌을 놓는 장소를 계산함)
  • Kubbernetes에서 Dapr 또는 각 API에서 동작
  • 우선 Dapr을 이용해서 뭔가를 만들려고 했는데 이번에는 Dapr과 관련된 일을 공유합니다.마지막으로 사은품으로 컴퓨터 부분을 조금 접해보고 싶어요.

    Dapr 서비스 간 통신 사용


    API 간에 통신할 때 Dapr을 통해 사이드카로 통신합니다.예를 들어, Front에서 CP로 요청을 보낼 때
  • Front에서 같은 Pod 내의 Dapr 사이드카
  • 까지
  • (Front)사이드카에서 (CP)사이드카
  • 까지
  • (CP)사이드카에서 CP
  • 까지
    이런 흐름에 호응도 세드차를 통해 통신된다.고객은 서버app-id를 지정하여 사이드카에 요청을 보내면 Dapr에서 다양한 서비스를 제공합니다.

    Dapr on Kubernetes

    app-id Kubernetes의 선언에 기술되었다.예를 들어 CP의 선언은 다음과 같습니다.
    apiVersion: apps/v1
    kind: Deployment
    metadata:
    ~~~
    spec:
      ~~~
      template:
        metadata:
          labels:
            app: cp
          annotations:
            dapr.io/enabled: "true"
            dapr.io/app-id: "cpapi"
            dapr.io/app-port: "5000"
            dapr.io/app-protocol: "grpc"
            dapr.io/config: "appconfig"
        spec:
          ~~~
    
    dapr.io/app-id의 부분은 app-id로 설정되었다.CP와 통신하려면 지정cpapi하면 OK라는 것이다.

    app-id


    HTTP의 경우
    요청을
    http://localhost:{DAPR-PORT}/v1.0/invoke/{APP-ID}/method
    
    형식으로 보냅니다.따라서 CP에게 요청을 보내려는 경우
    http://localhost:3500/v1.0/invoke/cpapi/method
    
    .
    gRPC의 경우 지정된 metadataapp-id를 전송합니다.예를 들면 Node입니다.만약 js라면 아래와 같이 메타데이터를 줄 수 있습니다.
    const metadata = new grpc.Metadata();
    metadata.add('dapr-app-id', 'server');
    client.sayHello({ name: "Darth Malgus" }, metadata)
    

    tracing


    분산 추적 시스템으로 zipkin을 사용했습니다.Kubbernetes 선언dapr.io/config에서 지정한 appconfig에서 zipkin의 설정을 다음과 같이 하면 zipkin의 선언을 간단하게 가져올 수 있습니다.
    apiVersion: dapr.io/v1alpha1
    kind: Configuration
    metadata:
      name: appconfig
    spec:
      tracing:
        samplingRate: "1"
        zipkin:
          endpointAddress: "http://zipkin.default.svc.cluster.local:9411/api/v2/spans"
    

    컴퓨터.


    컴퓨터는 복잡한 논리를 고려하기가 어려워서 간단한 것을 선택했다.레벨 1~3 이하입니다.
  • 무작위 선택
  • 탐욕스럽게 선택
  • 알파제로 배우기
  • 레벨 1은 무작위로 배치할 위치를 결정하고, 레벨 2는 점수가 가장 높은 곳에 배치한다.Lv3은 알파제로의 학습 모형여기.이 공개되었으니 제가 사용할 수 있도록 허락해 주십시오...사용 방법 참고블로그 홈페이지.
    이번에 제가 서버 부분을 직접 썼는데 TensorFlow Serving 이런 걸 쓰면 편할 것 같아요.



    자기가 열심히 해도 실패할 때 웃는다.
    (규격에 따라) CPU가 완전히 돌아가고 있으니 가능하면 시험해 보세요!
    https://github.com/chiru1221/dapr-othello

    좋은 웹페이지 즐겨찾기