Page History
...
만약 DC의 성능은 충분하고, 각 노드의 API들의 연산이 훨씬 많다고 가정하면 분산처리라 할수 있습니다.
Warning |
---|
DC 성능이 느린구조에서, 오토스케일을 거는 것은 문제가 있을수 있습니다. API가 늘어남에 따라 성능이 향상되는것이 |
...
아니고 병목현상으로 더 저하가 될수 있습니다. 이 구조에서는 측정을 통한 최적화된 한계값을 찾아 고정하는것이 더 효율적입니다. 오토스케일링이 무한개의 노드를 만드는 케이스
|
...
|
...
|
...
분산처리 노드를 늘려 DC가 뻗는경우
|
파편화된 설정
분산처리를 위해 Type별로 복제되는 DC를 수동으로 구성하였다고 가정해봅시다.
...
클러스터로 구성된 액터에게 메시지 보내기
Code Block |
---|
// 클러스터 액터 설정 : https://github.com/psmon/AkkaForNetCore/blob/master/AkkaNetCore/Startup.cs
services.AddActor<ClusterMsgActorProvider>((provider, actorFactory) =>
{
var actor = actorFactory.ActorOf(Props.Create<ClusterMsgActor>(0)
.WithDispatcher("fast-dispatcher")
.WithRouter(FromConfig.Instance), "cluster-roundrobin");
return () => actor;
});
// 클러스터 액터 DI 참조 얻기및 메시지 보내기 : https://github.com/psmon/AkkaForNetCore/blob/master/AkkaNetCore/Controllers/ActorTestController.cs
private readonly IActorRef clusterMsgActorProvider;
public ActorTestController(ClusterMsgActorProvider _clusterMsgActorProvider)
{
clusterMsgActorProvider = _clusterMsgActorProvider();
}
[HttpPost("/cluster/msg/tell")]
public void ClusterMsg(string value, int count)
{
for (int i = 0; i < count; i++)
clusterMsgActorProvider.Tell(value);
} |
...
Code Block |
---|
version: '3.4' services: datadog: image: datadog/agent:7 ports: - 8125/udp volumes: - /var/run/docker.sock:/var/run/docker.sock:ro - /proc/:/host/proc/:ro - /sys/fs/cgroup/:/host/sys/fs/cgroup:ro environment: DD_API_KEY: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx DD_DOGSTATSD_NON_LOCAL_TRAFFIC: "true" lighthouse: image: ${DOCKER_REGISTRY-}lighthouse build: context: . dockerfile: LightHouse/Dockerfile environment: CLUSTER_IP: lighthouse CLUSTER_PORT: 4053 CLUSTER_SEEDS: akka.tcp://actor-cluster@lighthouse:4053 akkanetcore: image: ${DOCKER_REGISTRY-}akkanetcore build: context: . dockerfile: AkkaNetCore/Dockerfile depends_on: - lighthouse ports: - 8080:5000 environment: ASPNETCORE_ENVIRONMENT: Development MonitorTool: datadog MonitorToolCon: datadog port: 5000 akkaport: 7100 akkaip: akkanetcore roles: "akkanet" akkaseed: "akka.tcp://actor-cluster@lighthouse:4053" akkanetcore2: image: ${DOCKER_REGISTRY-}akkanetcore build: context: . dockerfile: AkkaNetCore/Dockerfile depends_on: - lighthouse environment: ASPNETCORE_ENVIRONMENT: Development MonitorTool: datadog MonitorToolCon: datadog port: 5000 akkaport: 7000 akkaip: akkanetcore2 roles: "akkanet" akkaseed: "akka.tcp://actor-cluster@lighthouse:4053" akkanetcore3: image: ${DOCKER_REGISTRY-}akkanetcore build: context: . dockerfile: AkkaNetCore/Dockerfile depends_on: - lighthouse environment: ASPNETCORE_ENVIRONMENT: Development MonitorTool: datadog MonitorToolCon: datadog port: 5000 akkaport: 7000 akkaip: akkanetcore3 roles: "akkanet" akkaseed: "akka.tcp://actor-cluster@lighthouse:4053" |
데이터 분산처리
DC가 단일 DB라고 가정해봅시다. AKKA에는 메시지를 저장하는 영속성 기능도 지원하지만
중요 도메인 데이터에대해 RDB로 구성된것을 AKKA의 Persist 로 전환하는것은 바람직하지 않습니다.
RDB는 가장 안정적이고 검증이된 Persist역활을 하는 것중 하나이며 ,RDB의 부담을 덜어주는 방향으로
대용량 이벤트 데이터를 분산처리 하여 저장한후 RDB와 연동하는것이 추천됩니다. (이 후장에대 다룰예정)
- https://getakka.net/articles/clustering/cluster-sharding.html
- https://getakka.net/articles/clustering/distributed-data.html
Links :
...