목록 Architecture (31)
Mysql InnoDB 의 RepeatableRead Mysql 의 기본 Transaction isolate 수준은 RepeatableRead 이다. RepeatableRead 는 트랜잭션이 시작된 시점 이후로 여러 번 Select Row 를 확인해도 동일한 값을 갖는다는 것이다. Mysql 은 SnapShot을 사용해서 이를 보장한다. 트랜잭션마다 별도의 스냅샷을 기록하여 다른 트랜잭션이 값을 변경하고 Commit 해도 이 스냅샷을 이용해서 동일한 값을 읽게 되는 것이다. Phantom read 문제Repeatable Read 는 데이터의 추가, 삭제의 변경은 막지 못해 Phantom read 문제가 발생한다. 한 트랜잭션 내에서 전과 다른 조회 결과 row 수를 조회하게 된다는 것이다. InnoD..
이전 글 - 리버스 프록시 개념과 Nginx, ELB 로 로드밸런싱 실습리버스 프록시 개념이 처음이거나 Nginx config 를 처음 다뤄본다면 이전 글을 먼저 보고 오는 것을 추천한다. 해당 글에선 리버스 프록시와 로드 밸런싱 개념, 다중 WAS에서 Sesstion 관리, Nginx 와 AWS ALB로 로드밸런싱 실습을 다뤘다.Rate limit, Ip white list프로젝트를 배포할 때마다 무서운 것들이 있다. 악의적인 과도한 요청, 접속해선 안될 곳에 접근이 가능, 암호화되지 않은 데이터... 특히 가장 먼저 서버를 보여주는 주변 사람들이 웹 개발자가 많아서 더 무섭다. 이 사람들은 일반 사용자랑 달리 아주 자연스럽게 서버를 테스트할 테니 말이다. 그리고 실제로 꼼꼼하게 방어하지 않았다가 악의..
0. AS IS 기존에는 이 메인 / 백업 스토리지 업로드를 동기로 처리했다. 400KB의 이미지를 업로드할 때 main 33ms, backup 1680ms 정도가 필요했고, 사용자 응답은 이 둘을 더한 값 + ⍺ 가 될 것이다. 이미지 업로드 시에 각 스토리지 업로드를 비동기로 처리하되 모든 업로드가 정상일 경우에만 사용자에게 정상으로 응답하고자 한다. 그리고 동시에 비동기식 업로드 과정에서 생길 수 있는 더미 파일을 사용자 흐름에 포함하지 않고 처리하고자 한다. 이 글에선 위 요구 사항을 만족하기 위한 작업 과정을 소개한다. 목차는 다음과 같다. 1. 단순 비동기 처리 2. Future로 비동기 / 블록킹 방식으로 처리하는 경우, 그 문제점 3. CompletableFuture으로 쉽게 구현하는 다양..
Mysql DB Multi source replication지난 글에선 데이터 백업, 쿼리 분산을 위한 Mysql replication 을 소개했다. DB 서버 하나에 데이터를 넣어두는 것이 위험하다고 생각해 복제용 DB를 만들어 데이터를 백업했고, 이를 읽기 전용 서버로 생각하여 백업과 부하 분산 두 가지를 잡을 수 있었다. 이번엔 새로운 니즈가 생겼다. 지금 프로젝트 배포를 개인 홈 서버에 하고 있는데 물리적인 문제가 생겨 데이터가 날아가면 어쩌지 하는 생각이다. (혹시 불이라도 나거나 SSD가 고장나면 어째..) 원하는 구조는 아래와 같다. Api 서버별로 다른 DB 서버로부터 Cloud server 에 하나의 Mysql DB 를 띄워 단순 복제하는 것이다. 여러 소스로부터 복제한다고 해서 이를 M..
Mysql db replication DB를 백업하기 위해서 replication 을 사용한다. 백업을 위함도 클 것이고, 쿼리 부하 분산, 지역화의 이점도 얻을 수 있을 것이다. 이 글에선 아래 네가지 키워드를 다룬다. - Mysql이 제공하는 Replication 방식과 각 장단점- 비동기 복제의 정합성 문제- Spring boot에서 읽기와 쓰기 Datasource 분기하기 복제 종류 Mysql 의 복제 방식은 '동기', '비동기', '반동기'가 대표적이다. 동기 방식은 한 노드에 요청된 쿼리를 트랜잭션 내에서 다른 노드들에 전달하고 모든 노드들이 동기화되면 트랜잭션의 결과를 반환한다. 마스터(또는 첫 요청을 받은 노드)가 다른 노드들에 쿼리를 전달하는 식으로 진행된다. 모든 노드에서 동일한 요청..
Diagram EKS는 2가지 VPC로 구성되어 있다. Kubernetes control plane를 AWS에서 관리하는 AWS VPC, 그리고 사용자가 직접 관리하는 Customer VPC가 있다. 사용자는 K8S의 control plane를 직접 관리하지 않고, 실질적으로 사용해야 하는 서비스들을 AWS EC2를 Worker node로 하는 Customer VPC에 집중하도록 한다. Cluster endpoint access 이때 이 cluster의 Endpoint, 즉 AWS VPC의 kubernetes api server의 접근 가능 VPC를 설정할 수 있다. public은 요청자의 VPC에 상관없이 endpoint에 접속할 수 있고, 반대로 private 은 cluster 내 VPC 또는 그와 ..
EKS 모니터링하기 / Cloudwatch 세팅부터 Metric slack 알람까지 1. EKS의 Metric 정보를 fluentbit와 cloudwatch agent를 이용하여 Cloudwatch로 모니터링한다. 2. Cloudwatch의 알람을 Slack으로 전송한다. docs : https://catalog.us-east-1.prod.workshops.aws/workshops/9c0aa9ab-90a9-44a6-abe1-8dff360ae428/ko-KR/90-monitoring/100-build-insight CWagent 설치와 Fluentbit 를 Daemonset 으로 선언 cwagent-fluent-bit-quickstar.yaml 다운 받는다. wget https://raw.githubuse..
NO_PUBKEY B53DC80D13EDEF05 Google cloud에서 반환하는 gpg key 포맷이 'OpenPGP ASCII armor'로 변경되면서 기존 kubernetes docs에서 소개하는 Installing kubeadm 방식을 사용하는 경우 gpg key이 올바르지 않는 문제가 발생한다. 혹시 Kubeadmin, Kubelet, Kubectl 을 설치하는 과정에서 apt repository를 등록하고 apt update로 package 업데이트 시 아래와 같은 key 에러(NO_PUBKEY B53DC80D13EDEF05)를 만났다면 이전 방식으로 설치를 진행하진 않았는지 점검한다. Err:2 https://packages.cloud.google.com/apt kubernetes-xeni..