on
모노리스에서 마이크로서비스로의 전환
모노리스에서 마이크로서비스로의 전환
반응형
과거의 대규모 단일 애플리케이션 개발 시대에 애플리케이션 배포는 사소한 작업이 아니었습니다. 처음에는 여러 서버에 대한 구매 주문에서 시작하여 며칠 간의 랙링, 배선 및 구성 작업을 거쳤습니다. 운이 좋다면, 모든 관련 당사자들이 잘못될 수 있는 거의 모든 것을 생각했기 때문에 여러분의 배치는 첫 번째 시도에서 효과가 있었습니다. 이러한 매개 변수는 애플리케이션을 배포하기 위해 가장 적은 수의 간단한 단계를 요구함으로써 모노리스를 위한 발판을 마련합니다.
클라우드에서 버튼 한 번 클릭으로 엄청난 양의 인프라를 프로비저닝할 수 있는 오늘날로 돌아가 보면 인프라 자동화 툴의 전성기를 맞이할 수 있습니다. 인프라 가용성의 이러한 급격한 변화는 마이크로 서비스 출현의 주요 촉매 중 하나입니다.
다음과 같은 경우 마이크로 서비스 아키텍처가 필요하지 않을 수 있습니다.
마이크로서비스의 인기는 명백하다. 블로그 롤이나 설명서에 마이크로서비스에 대한 언급이 없는 개발자 중심의 벤더를 찾기란 쉽지 않을 것입니다. 예를 들어, 콩 게이트웨이와 콩 메쉬의 제공은 모노리스에서 마이크로 서비스 아키텍처로 이동하는 기업을 지원하는 데 특화되어 있습니다.
그러나 마이크로서비스가 모든 비즈니스 애플리케이션에 마법의 총알이 되는 것은 아니라는 것을 아는 것이 중요합니다. 다음은 현재 모노리스 아키텍처로도 충분하다는 몇 가지 좋은 지표입니다.
스케일링에는 문제가 없습니다.
애플리케이션에 대한 트래픽이 비교적 안정적인 비즈니스 도메인이 있으며, 마이크로서비스 아키텍처를 사용하는 경우 동적 확장이 필요하지 않을 수 있습니다. 마이크로서비스의 주요 이점은 온 디맨드로 확장할 수 있다는 것입니다. 확장이 비즈니스에 문제가 되지 않는다면 마이크로 서비스가 필요하지 않을 수 있습니다.
단일 아키텍처가 이미 시장 수요를 충족시킬 수 있을 만큼 유연합니다.
애플리케이션을 유연하게 유지하고 필요에 따라 기능을 분리할 수 있는 충분한 선견지명이 있을 수 있습니다. 새로운 기능과 기능을 신속하게 도입하는 능력은 마이크로서비스의 또 다른 핵심 원칙이다. 만약 여러분이 이미 이것을 할 수 있다면, 아주 잘했어요!
애플리케이션을 배포하는 데 문제가 없습니다.
구축 속도는 마이크로서비스의 또 다른 주요 이점입니다. 배포 파이프라인이 이미 비즈니스 요구에 맞게 충분히 빠른 경우 마이크로 서비스가 필요하지 않을 수 있습니다.
마이크로서비스 아키텍처로 전환해야 하는 이유
비즈니스 컨텍스트를 평가한 후 개선할 여지가 있다고 결정할 수 있습니다. 트래픽 스파이크가 응용 프로그램에 과부하를 주었던 때를 떠올릴 수 있습니다. 밀린 기술 부채를 수정하고 납품 일정을 단축해야 했던 때를 기억할 수도 있습니다. 한 번은 영업 팀이 통합되고 몇 개월 안에 사용할 수 있는 새로운 기능을 판매했을 때 제대로 하려면 1년 이상이 걸릴 수도 있습니다.
이러한 상황 중 하나라도 마음에 든다면, 마이크로 서비스로 전환함으로써 응용 프로그램을 활용할 수 있습니다. 각 역할에 대한 주요 이점과 함께 조직의 몇 가지 주요 역할에 대해 생각해 보겠습니다.
무엇이 Microservices로 전환하는 원동력입니까?
위의 각 주요 참여자들은 마이크로 서비스를 구현하는 동인이 될 수 있지만, 대부분 개발 팀이 전환을 주도합니다. 결국, 개발자들은 마이크로 서비스를 구현한다. 개별 마이크로 서비스 개발로 이어지는 개인 간의 논의는 매우 추상적인 경우가 많으므로 행간을 파악하는 것이 중요합니다.
기업 이해관계자: 우리는 시장에 더 빨리 대응할 수 있어야 합니다! 경쟁업체 A는 이미 X 기능을 가지고 있습니다!
제품 또는 프로젝트 관리자: 최선을 다하고 있습니다. 마이크로 서비스 배치 및 개발 계획에는 많은 과제가 있습니다.
개발자: 기술 부채가 그렇게 많지 않았다면 새로운 기능을 더 빨리 추가할 수 있었을 것입니다.
조직 내에서와 유사한 의견을 들어본 적이 있을 것입니다. 이러한 의견은 마이크로 서비스라는 단어를 사용하지 않고 마이크로 서비스를 구현해야 할 필요성을 강조합니다.
이 전환의 성공을 측정하려면 어떻게 해야 합니까?
모노리스에서 마이크로서비스로의 전환 성공 여부를 측정하려면 측정, 측정, 측정, 측정해야 합니다. 투자 수익률(ROI)이 없다면 전환할 이유가 없습니다. 적절한 메트릭이 있는 경우에만 ROI를 성공적으로 측정할 수 있습니다. 몇 가지 중요한 메트릭을 살펴보겠습니다.
하나의 코드를 프로덕션으로 변경하는 데 얼마나 걸립니까?
이것은 중요한 것입니다! 모노리스에서는 비교적 간단한 코드 변경도 퇴행을 방지하기 위한 다중 레이어 테스트 노력이 필요하다. 해당 테스트의 소요 시간과 테스트 실행에 관련된 인재를 고려하십시오. 그리고 모든 테스트가 통과되면 실제 배포가 이루어집니다. 코드가 커밋되는 즉시 스톱워치를 시작하고 변경 사항이 실운영에 적용되면 스톱워치를 중지하십시오. 이것이 마이크로 서비스 개발에서 능가할 지표가 될 것입니다.
SLA를 달성하고 있습니까?
SLA는 비즈니스마다 의미가 다르기 때문에 비교적 자유로운 의미로 사용되고 있습니다.
간단히 말해, SLA를 주요 비즈니스 요구사항을 적극적으로 충족하는 데 필요한 시간으로 정의해 보겠습니다.
예를 들어, 귀사가 은행 부정 행위 경고를 위한 API 서비스를 운영하는 경우, 지난 한 달 또는 한 해 동안 서비스가 고객 API 요청에 얼마나 안정적으로 대응했습니까?
헤아릴 수 없는 중요한 것
하드 숫자도 중요하지만, 매우 중요하지만 공식적으로 측정하기 어려운 다른 측정 기준들이 있다.
팀의 사기를 점검하고 팀의 전반적인 에너지를 측정하기 위해 정기적으로 지푸라기 여론조사를 실시합니다.
그들은 코드를 던지고 배치하는 것에 흥분하는가? 그들은 그들의 일에 더 힘이 나나요? 행복한 개발 팀은 생산적인 개발 팀입니다!
Microservices로 전환하려면 어떻게 해야 합니다.
모든 기업이 마이크로 서비스 전환에 대해 동일한 접근방식을 취하는 것은 아닙니다.
그러나 높은 수준에서 모든 조직에는 계획, 지원 인프라, 지원 메트릭 및 일부(개스!) 문화 변화가 필요합니다. 이러한 항목을 기준으로 자세한 내용을 살펴보겠습니다!
계획을세우다
가장 기본적인 공격 계획에는 다음 단계가 포함되어야 합니다.
먼저 모노리스에서 영향을 적게 미치는 기능을 파악합니다. 비즈니스 크리티컬 기능이 아닌 영향을 적게 미치는 기능부터 시작하십시오. 약간의 학습 곡선이 있습니다. 그리고 위험 요소도 있습니다. 처음으로 이런 변화를 만들게 됩니다. 온라인 서점을 운영하는 경우 재고 또는 구매 시스템을 먼저 마이그레이션하지 않는 것이 좋습니다. 이러한 시스템은 본질적으로 비즈니스 크리티컬 기능이기 때문입니다. 도서 등급이나 사용자 의견을 자신의 마이크로 서비스로 옮기는 것은 위험을 줄일 수 있습니다.
주요 구성 요소와 구성 요소 간에 관련된 트래픽 흐름을 결정합니다. 기능을 파악한 후 마이크로 서비스로 추출하기 위해 모노리스 코드 베이스에서 어떤 구성 요소가 필요합니까? 사용자가 마이크로서비스에 직접 연락할 수 있을까요, 아니면 모노리스 프록시로 요청을 처리할 수 있을까요?
이 모든 세부 정보를 높은 수준의 목표에 포함시켜 모든 구현 단계를 코드화합니다. 단일 기능에 대한 전환 프로세스를 예측하고 문서화함으로써 해당 프로세스의 감사 및 반복성을 향상시킬 수 있습니다.
API 게이트웨이 사용
모노리스 애플리케이션에는 사용자를 위한 단일 "정면 출입문"이 있습니다. 마이크로 서비스를 이용하면 이제 몇 개의 "현관문"을 추적해야 하는 것처럼 보일 수 있습니다. 마이크로 서비스 간 및 외부 세계와의 커뮤니케이션을 촉진하는 것은 어려운 작업처럼 보일 수 있습니다.
API 게이트웨이는 비즈니스 기능을 지원하는 마이크로 서비스를 호출하는 세부 정보를 추상화하여 모든 요청이 들어가야 하는 단일 "프런트 도어"를 다시 한 번 제공합니다. API 게이트웨이는 올바른 마이크로 서비스 대상에 대한 인증, 권한 부여 및 트래픽 라우팅을 처리합니다. 콩 게이트웨이는 이것을 믿을 수 없을 정도로 간단하게 만듭니다. 몇 가지 명령을 사용하면 통신 트래픽의 복잡성을 추상화할 수 있습니다.
측정, 측정, 측정
마이크로 서비스 아키텍처에는 여러 가지 목표가 있지만, 유연성, 제공 속도 및 탄력성이 핵심입니다. 코드 커밋과 프로덕션 배포 완료 사이의 델타에 대한 기준을 설정한 후 마이크로 서비스에 대해 동일한 프로세스를 측정합니다.
마찬가지로, "비즈니스 가동 시간"에 대한 기준을 설정하고 이를 사후 마이크로 서비스 구현 기준과 비교합니다. "비즈니스 가동 시간"은 기본 비즈니스 목표와 관련하여 아키텍처의 필수 구성 요소에 필요한 가동 시간입니다.
모노리스를 사용하면 모든 구성요소를 함께 배치하므로 한 구성요소의 결함이 전체 모노리시 애플리케이션에 영향을 미칠 수 있습니다. 마이크로 서비스로 전환함에 따라 모노리스에 남아 있는 부품들은 여러분이 만들고 있는 마이크로 서비스 구성요소의 영향을 최소화해야 합니다.
예를 들어, 서점인 경우 중요한 업무는 제품(책)과 결제 시스템입니다. 도서 등급을 마이크로 서비스로 추상화했다고 가정해 봅시다. 고객이 주로 원하는 것은 책을 구입하는 것이기 때문에 이 경우 도서 등급 서비스가 중단되더라도 비즈니스는 여전히 기능할 수 있으며 최소한의 영향을 받을 수 있습니다.
Do DevOps
마지막이지만 엄청나게 중요한 전환은 문화와 관련이 있다. 문화적 변화는 어렵지만, 이러한 마이크로 서비스 전환의 성공을 위해서는 필요합니다. 개발 팀은 더 이상 애플리케이션을 작성하지 않고 구축해야 할 운영 부서로 이 애플리케이션을 넘겨버립니다. 새로운 표준에는 CI/CD 파이프라인, 자동화, 메트릭스, 모니터링 등이 포함됩니다. 성공을 거두려면 모든 팀원이 상호 협력하고 협력해야 합니다!
예제별 시연
이 예에서는 프런트엔드 및 백엔드 코드로 구성된 매우 일반적인 모노리스 아키텍처를 사용하여 기능의 일부를 자체 마이크로 서비스에 추출하는 방법을 보여 줍니다.
이 경우 동영상과 등급이라는 두 개의 "앱"이 있는 SQLite 데이터베이스로 지원되는 Django 애플리케이션을 사용합니다. 평가 앱을 Kong Gateway 뒤에 호스팅되는 자체 마이크로 서비스에 추출하여 공식 Kong 이미지에 대한 지침을 사용하여 설정합니다.
설정
이 섹션의 각 명령에 대해 자세히 설명하지는 않겠습니다. 유일한 목표는 프로젝트 템플릿을 설정하는 것이기 때문입니다.
mkdiriedb 달러
이제 기본 SQLite 데이터베이스와 모든 마이그레이션이 포함된 전체 Django 설정을 완료했습니다. 두 가지 모델로 시작하겠습니다.
간단히 설명하자면, 우리는 무비 와 레이팅 이라는 두 가지 모델을 데이터베이스로 유지하고 있다. 레이팅은 두 모델의 관계를 정립하기 위해 영화 모델과 관련된 영화 분야를 가지고 있다. 대부분의 경우 등급이 여러 개인 영화가 하나 있습니다.
작동적으로, 이것은 등급이 증가할수록 부하가 증가하여 페이지 부하가 느려진다는 것을 의미합니다. 영화 등급이 웹 사이트의 속도를 저하시키는 대신 Kong Gateway 뒤에 있는 자체 마이크로 서비스로 등급을 이동합니다.
단순성을 위해 영화화 코드와는 별도로 자체적인 장고 프로젝트(등급_서비스)로 등급 코드를 이동시키겠다.
$ mkdir 등급_서비스
우리가 복사해야 할 중요한 부분은 delop/models.py 파일이다. 여기서 등급 앱 전체를 무비브 프로젝트에서 제거할 수 있다.
그러나 영화에 대한 의존도가 낮아진 지금은 등급 모델에 한 가지 조정이 필요하다. 등급의 텍스트 필드에 대한 외래 키 참조만 변경하면 됩니다.
모델을 조정한 후 모델 변경을 위한 마이그레이션을 만들고 실행합니다.
$./관리합니다.화기애애한 행동. $./관리합니다.py 이주
우리가 왜 이런 변화를 일으키고 있는지 설명하는 것이 중요합니다. 기능을 전문화하지만 운영을 일반화하는 것은 마이크로 서비스 접근 방식에서 최대의 이점을 얻는 데 도움이 될 것입니다. 이 경우, 당사의 새로운 마이크로 서비스는 등급 관리를 전문으로 하지만 일반화되어 모든 영화 제목을 가져가고 등급을 저장할 수 있습니다.
동일한 이름의 동영상이 여러 개 있는 경우 등급을 보다 고유하게 하기 위해 EIDR 번호를 사용할 수도 있습니다. 한 걸음 더 나아가 영화 분야를 좀 더 포괄적인 분야로 바꾸고 영화뿐 아니라 데이터 객체에 대한 평가도 절감할 수 있었다.
마지막으로 코드를 변경해야 할 사항이 있습니다. 무비디브 프로젝트에서 등급 코드가 빠져 있는 상황에서 무비, 레이팅스에서는 데이터베이스 수준의 가입을 할 수 없기 때문에 HTTP 요청이 필요하다. 동영상 목록 보기에서 보기 클래스를 다음과 같이 업데이트해야 합니다.
클래스 MovieListView(목록 보기): 모델 = 영화 def get_queryset(자체): Movie.objects.all()을 반환합니다.select_related()
다음과 같은 경우:
페이지가 결과를 기다리기 때문에 기술적으로 여전히 차단 통화입니다. 그러나 이 접근 방식을 사용하면 하드 종속성이 제거되고 이 특정 요청에 대한 논리를 작성할 수 있습니다.
마지막으로 우리는 ratings_service 에서 작은 Dockerfile 을 만들어 컨테이너 런타임을 공씨와 함께 진행할 것입니다.
# 도커파일 파이썬에서:3 WORDIR /home/chad/ratings_서비스 COPY 요구사항.txt ./ RUN pip 설치 --no-cache-dir -r 요구 사항.txt의 복사. cmd [ "complete", "manage.py", "runserver", "0.0.0:flature" ]
또한 허용됨_ 을 설정해야 합니다.트래픽이 통과되도록 하기 위해 hosts_service 설정의 HOSTS = ["*"].
# 등급_서비스/서비스/서비스/서비스/서비스/서비스.파이의 허용_HOSTS = ["*"] $ 도커 빌드 -t 등급_서비스. $ docker run -d -p 9000:secrating_service
무비브와 레이팅스 서비스가 분리됐으니 공씨에게 교통정리를 알려줘야 한다. 우리는 서비스와 경로를 추가할 것이고, 그래서 콩은 우리의 요청을 대리하는 방법을 알고 있습니다.
$ curl -i -X POST http://localhost:8001/services/ -d 'name=subervice' -d 'url=subst://host.docker.internal:docker' HTTP/1.1 201 생성됨 $ curl -i -X POST http://localhost:8001/services/d 'curl=subervice.local' -d 'curl=/' HTTP/1.1 201 생성됨
이제 등급 서비스에 액세스할 수 있습니다!
$ curl -i -X GET --url http://localhost:8000/ --header "호스트: 등급-서비스.local" [{ "movie": "바람과 함께 사라지다" "created_at": "created-08-08 16:01:46", 설명: "클래식 무비!", "등급_값": 9 }, { "movie": "The Little Shop of Horrors" "created_at": "created-08-08 16:01:46", "해명": "나는 우주에서 온 비열한 녹색 엄마이고 나쁜 놈이야!" "등급_값": 7 }]
이 예에서는 데이터 로드 단계가 그다지 중요하지 않기 때문에 의도적으로 건너뛰었습니다. 테스트해야 할 데이터가 이미 많습니다. 여기서 중요한 것은 어떻게 모노리스의 기능 일부를 골라서 추출하고 코드 베이스에 넣어 콩 게이트웨이 뒤의 마이크로 서비스 애플리케이션으로 사용할 수 있는가 하는 것입니다.
다음에 할 일이 뭐죠?
모노리스에서 마이크로 서비스로 전환하는 복잡한 주제에서 많은 부분을 다루었습니다! 먼저, 마이크로 서비스가 비즈니스 환경에 적합하지 않을 수 있는 몇 가지 사례를 고려했습니다.
그런 다음, 조직의 마이크로 서비스 전환에 관련된 이해 관계자들을 살펴본 후, 이들의 전환 성공 여부를 판단하기 위해 조직이 파악해야 하는 메트릭스를 살펴 보았습니다. 마지막으로, 이러한 전환을 위해 채택해야 할 몇 가지 주요 관행에 대해 설명하면서 시작하는 방법에 대한 구체적인 예를 살펴보았습니다.
이 예에서 얻을 수 있는 것보다 실제로 다루어야 할 것이 훨씬 더 많습니다. 그러나 우리는 콩이 제공하는 것과 같은 성숙하고 탄력적인 API 게이트웨이를 통합하는 것의 중요성을 강조할 수 있었다. Kong Gateway를 구현한 후에는 플러그인 생태계를 활용하여 메트릭스, 모니터링 및 배포 자동화를 통한 DevOps 지원 등과 같은 마이크로 서비스의 이점을 더 많이 얻을 수 있습니다.
from http://top-poster.tistory.com/47 by ccl(A) rewrite - 2021-10-14 11:00:54