mcis

package
v0.8.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Dec 13, 2023 License: Apache-2.0 Imports: 18 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func StartScheduler

func StartScheduler(wg *sync.WaitGroup, manager *CollectManager) error

Types

type CollectManager

type CollectManager struct {
	CollectorAddrSlice []*collector.MetricCollector
	CollectorPolicy    string
	K8sClientSet       *kubernetes.Clientset
	WaitGroup          *sync.WaitGroup
}

CollectManager 1. CollectorAddrSlice

  • 생성한 Go-routine 기반 collector 의 주소값을 보관하는 배열 변수입니다.

2. CollectorPolicy

  • Collector Policy 로 MaxAgentHost, CSP 중 한개의 입력값을 받습니다.
  • MaxAgentHost 방식은 동작 방식(deployType) - dev, compose, helm 에서 모두 정상 동작 및 기능테스트까지 완료하였습니다.
  • CSP 방식은 dev, compose 환경에서만 정상 동작 및 기능 테스트까지 완료하였습니다.

3. K8sClientSet

  • 동작 방식(deployType)이 helm 일 경우, k8s와 통신하기 위한 conn 객체입니다.
  • 해당 객체는 k8s in-cluster 모드에만 동작합니다.

func NewCollectorManager

func NewCollectorManager() (*CollectManager, error)

func (*CollectManager) CreateCollector

func (manager *CollectManager) CreateCollector() error

func (*CollectManager) DeleteCollector

func (manager *CollectManager) DeleteCollector() error

func (*CollectManager) InitDFK8sEnv

func (manager *CollectManager) InitDFK8sEnv() (err error)

type CollectorScheduler

type CollectorScheduler struct {
	// contains filtered or unexported fields
}

CollectorScheduler Struct cm : 콜렉터 생성 및 시작, 중지 및 삭제 를 위한 매니저 객체 inMemoryTopicMap : 토픽 관련 정보를 다루기 위한 inMemoryTopic 구조체 topicQue : Topic 추가 및 삭제 처리 요청을 담아두는 Queue

func NewCollectorScheduler

func NewCollectorScheduler(wg *sync.WaitGroup, manager *CollectManager) (*CollectorScheduler, error)

func (CollectorScheduler) AddTopicsToCSPCollector

func (cScheduler CollectorScheduler) AddTopicsToCSPCollector(addTopicList []string)

AddTopicsToCSPCollector csp type 별로 collector 에게 topic 을 추가 (topicMap)

func (CollectorScheduler) AddTopicsToCollector

func (cScheduler CollectorScheduler) AddTopicsToCollector(addTopicList []string, maxHostCount int)

AddTopicsToCollector

스케줄러의 Topic 관리는 cScheduler.inMemoryTopicMap 와 cb-store 로 이루어 집니다.
  • cScheduler.inMemoryTopicMap > TopicMap => 실제 컬렉터 당 가지고 있는 토픽 맵 리스트 > CollectorPerAgentCnt => 컬렉터당 가지고 있는 토픽 개수 array
  • cb-store > types.CollectorTopicMap < /push/collectorTopicMap/{토픽 맵 리스트} > => cScheduler.inMemoryTopicMap.TopicMap 을 고스란히 저장 > types.Topic < /push/topic/{토픽} > => 해당 토픽이 배치된 collector idx 값 저장

설명 ppt 링크 :

func (CollectorScheduler) BalanceTopicsToCollector

func (cScheduler CollectorScheduler) BalanceTopicsToCollector(maxHostCount int)

BalanceTopicsToCollector 토픽 추가 & 삭제 처리가 완료된 topicMap 을 기준으로 최적화 배치 수행

func (CollectorScheduler) DeleteTopicsToCSPCollector

func (cScheduler CollectorScheduler) DeleteTopicsToCSPCollector(delTopicList []string)

DeleteTopicsToCSPCollector csp type 별로 collector 에게 topic 을 삭제 (topicMap)

func (CollectorScheduler) DeleteTopicsToCollector

func (cScheduler CollectorScheduler) DeleteTopicsToCollector(delTopicList []string)

DeleteTopicsToCollector

  • cb-store 의 { key: /push/topic/{토픽}, value: 콜렉터 idx 값 } 토대로 topicMap 에 등록된 topic 을 삭제합니다.
  • 해당 topic 을 가지고 있는 agent 의 상태를 unhealthy 로 업데이트 합니다.

설명 ppt 링크 :

func (CollectorScheduler) DistributeTopicsToCollector

func (cScheduler CollectorScheduler) DistributeTopicsToCollector()

DistributeTopicsToCollector

  • 토픽 추가, 삭제, 최적화 배치가 끝난 topicMap 을 기준으로 각 collector 에게 topic 분배
  • helm 의 경우 topicMap 현황을 configmap 에 작성
  • docker-compose 의 경우 topicMap 현황을 go-channel 을 통해 collector(go-routine) 에게 분배

func (CollectorScheduler) ProvisioningCollectorByCSP

func (cScheduler CollectorScheduler) ProvisioningCollectorByCSP()

ProvisioningCollectorByCSP types.TotalCspCnt 만큼 콜렉터 생성

func (CollectorScheduler) ScaleInOutCollector

func (cScheduler CollectorScheduler) ScaleInOutCollector()

ScaleInOutCollector

  • 토픽 추가, 삭제, 최적화 배치가 끝난 topicMap 을 기준으로 collector 개수 동기화
  • 현재 생성되어 있는 collector 개수 < topicMap collector 개수 => scale out
  • 현재 생성되어 있는 collector 개수 > topicMap collector 개수 => scale in

func (CollectorScheduler) ScheduleCSPBasedCollector

func (cScheduler CollectorScheduler) ScheduleCSPBasedCollector(addTopicList []string, delTopicList []string)

ScheduleCSPBasedCollector

  • types.TotalCspCnt 만큼 콜렉터 생성
  • types 에 정의된 csp 별로 collector 미리 생성
  • agent 는 topic 및 cspType 정보를 같이 넘겨주며, DF는 agentCspType 별로 collector 에게 분배
  • 해당 csp 정책의 동작 테스트는 해봐야합니다. 로직 구현은 해놓았으나 정상 동작 유무는 확인이 필요합니다.

func (CollectorScheduler) SchedulePolicyBasedCollector

func (cScheduler CollectorScheduler) SchedulePolicyBasedCollector(addTopicList []string, delTopicList []string)

SchedulePolicyBasedCollector

=== InMemory 연산 Start ===
- AddTopicsToCollector: cScheduler.inMemoryTopicMap (콜렉터의 토픽 현황 in-memory 객체) 에 추가 토픽들을 더합니다.
- DeleteTopicsToCollector: cScheduler.inMemoryTopicMap 에 삭제 토픽들을 제외합니다.
- BalanceTopicsToCollector: cScheduler.inMemoryTopicMap 에 Topic 최적화 배치 작업을 수행합니다.
=== InMemory 연산 End ===
=== InMemory 연산 결과값 기반 기능 동작 수행 Start ===
- ScaleInOutCollector: cScheduler.inMemoryTopicMap 와 현재 실제로 생성되어 있는 collector 개수를 비교하여 현상 유지(개수 유지), scale in 또는 out 을 수행합니다.
- DistributeTopicsToCollector: cScheduler.inMemoryTopicMap 의 topic 설정 값대로 현재 생성되어 있는 콜렉터들에게 Topic 리스트를 전달합니다.
- WriteCollectorMapToInMemoryDB: cScheduler.inMemoryTopicMap.TopicMap 을 configmap 또는 cb-store 에 저장합니다.
=== InMemory 연산 결과값 기반 기능 동작 수행 End ===

func (CollectorScheduler) Scheduler

func (cScheduler CollectorScheduler) Scheduler()

func (CollectorScheduler) WriteCollectorMapToInMemoryDB

func (cScheduler CollectorScheduler) WriteCollectorMapToInMemoryDB()

WriteCollectorMapToInMemoryDB

  • 최종 연산이 끝난 topicMap 을 cb-store 에 저장

type InMemoryTopic

type InMemoryTopic struct {
	TopicMap             map[int][]string
	CollectorPerAgentCnt []int
}

InMemoryTopic Struct TopicMap : 콜렉터 마다 가지고 있는 Topic 현황 CollectorPerAgentCnt : 콜렉터 마다 가지고 있는 Topic 개수 현황

Directories

Path Synopsis

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL