붸베베
77
2015-03-20 09:51:59
6
4893

이중화된 서버환경에서 synchronized 사용하여 동기화처리하는 방법


예를 들어 호텔예약프로그램을 운영한다고 가정했을때

예약등록을 처리하는 메서드에 synchronized 를 사용하여 중복예약접수를 하지 못하도록 막고자 합니다.

문제는 was가 2대 또는 그이상 배치하여 분산처리할 경우에 각 서버마다 인스턴스가 따로 돌아서

위방법만 사용하게 되면 중복예약이 되거나 할꺼같은데요.

위와같은 환경일때 어떤방법으로 동기화 처리를 하는지 궁금합니다.

2
  • 답변 6

  • permit79
    374
    2015-03-20 09:54:45

    중복을 막고자 할때 보통 DB에 lock 을 걸지 않나요...??

    Mysql 같은 경우 select 에 for update 문으로 lock 걸고 insert 후 commit 하는 방식으로...

  • 붸베베
    77
    2015-03-20 10:02:03

    그렇군요. 분산처리된 서버환경에서는 db를 락걸어서 사용하는 방법이..제일 쉽고 간단하겠군요.

    permit79님 답변감사합니다.

  • 음...
    1k
    2015-03-20 10:03:35

    그나마 제일 간단하게 접근할 수 있는게 이미 그런 동시성.원자성 문제를 다루고있는 DBMS쪽에서 처리를 하는거구요.

    잠재적으로 DB성능이슈가 우려된다면 dictionary계열의 자료구조를 기반으로 그쪽 처리만 전담하는 어플리케이션을 개발해서 was들이 어플리케이션에 요청하는 방식으로 구성하시면 되겠죠.

  • 붸베베
    77
    2015-03-20 10:07:27

    아 예약을 등록처리하는 어플리케이션서버를 따로 만들고 각 분산된서버들이 그 어플리케이션서버를 바라보게 해서 사용하는 방법도 있겠군요. db쪽에서 처리하는게 제일 편해보이네요. ㅎㅎ 답변 감사합니다.

  • fender
    21k
    2015-03-20 10:17:23
    Akka도 검토해보시는 걸 추천 드립니다. 그런 종류의 동시성 문제를 다룰 때 마치 단일 스레드에서만 접근하는 것처럼 가정하고 개발이 가능합니다.


  • zepinos
    20k
    2015-03-20 16:34:13

    또다른 해결책으론 Hazelcast 와 같은 IMDG 을 이용하는 방법도 있습니다.


    여러 서버를 하나의 클러스터로 묶어서 Queue 나 Stack 으로 동일 개체처럼 사용하는 방법과 Map 등에 저장해놓고 Lock 을 걸어서 중복처리가 안되게 해주는 방법도 있겠죠.

  • 로그인을 하시면 답변을 등록할 수 있습니다.