Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

Flush의 경우 비동기로 쌓인 큐를 ,기능에 따라 전송또는 저장하는 액션이 발생할수 있습니다.


BulkInsert

Image Added

이벤트마다 1건씩 Insert처리하는것은 여러모로 비효율적이며, ORM을 통해 한꺼번에 영속화(메모리->DB저장소)를 한다고 해도 비효율적인 성능이 발생함을 알수가 있습니다.

이벤트는 여러모로 BulkInsert 방식으로 저장가능해야하고, ORM이냐? SQL이냐?  문제는 중요하지 않습니다. 

단지 ORM의 도움을 받았을때 더 스마트하고 짧은 코드로 처리가 가능합니다. ( Message Object → Entity Object  → 데이터베이스에 영속화 )


모니터링

벌크처리능력을 매트릭스를 통해 처리량을 집계능력을 집계할때 유용할수 있습니다.

샘플은 AKKA 모니터링이 활용되었으며 데이터독과 연동되으며..,  이벤트 카운트를 1씩올리는게아닌

벌크처리된 카운팅을 올리면 되겠습니다.

Code Block
title샘플 - 벌크인서트와 실시간 카운팅집계둘다를한다.
if (bulkItems_completed.Count > 0 && IsWriteDB)
{
	BatchType = "completed";
	EntityFrameworkManager.ContextFactory = context => new BatchRepository(Startup.AppSettings);
	using (var context = new BatchRepository(Startup.AppSettings))
	{
		await context.BulkInsertAsync(bulkItems_completed, options => {
			options.BatchSize = BatchSize;
		});
		Context.IncrementCounter("akka.custom.received1", bulkItems_completed.Count);
	}
}

Image Added


참고 : Real time performance counters


Note

어플리케이션에 클러스터가 이미 구성되었다면, 위방법이 유용할수 있지만

위 문제를 해결하기위해 클러스터를 구성하는것은 추천드리지 않습니다.


클러스터로 구성이 안되어있고, 분산된 데이터를 모으는 방법은 카프카를 통해 처리하는것을 권장합니다.



연관 코드들: