현대의 시스템은 이중화 및 부하분산의 관점에서 여러 서버에 서비스를 분리하는 것이 당연시되고 있습니다. 그러나 캐시와 큐의 남용 등 시스템 구성이 필요 이상으로 복잡해지고 있는 경우도 있습니다. 복잡한 서버 구성을 단순화하기 위해, Go의 로컬데이터베이스로 잘 알려진 Bolt의 개발자인 벤 존슨 씨가 만들어낸 것이 'Litestream'입니다.

Why I Built Litestream - Litestream
https://litestream.io/blog/why-i-built-litestream/

Why I Built Litestream - Litestream

tl;dr—Despite an exponential increase in computing power, our applications require more machines than ever because of architectural decisions made 25 years ago. You can eliminate much of your complexity and cost by using SQLite & Litestream for your prod

litestream.io


존슨이 '여러 좋은 점도 많았지만, 사실은 최악의 시대'라고 평가하는 수십 년 전에는 단 하나의 프로그래밍 언어와 SQL 지식이 있으면 어떤 개발현장에서도 통용되었고, 모든 웹사이트가 기본적 HTML 기술로 만들어지던 시절이었다고 말합니다. 1990년대 후반에는 'Linux', 'Apache', 'MySQL', 'PHP'를 조합한 이른바 'LAMP' 구성이 등장했고, LAMP는 웹사이트 개발에 있어 필수구성이 되었습니다만, 당시의 CPU로는 LAMP 구성은 조금 부하가 높은 것이었습니다. 또한 웹개발에서 주류의 언어였던 PHP 및 Ruby는 실행속도가 느렸습니다, MySQL이나 PostgreSQL 등의 데이터베이스 서버는 관리가 상당히 복잡해지는 등 하나의 서버에 모든 시스템를 포함시키는 방식에는 한계가 있었습니다.


이러한 이유로, 데이터베이스와 응용프로그램 서버를 물리적으로 분리하는 구성이 주류가 되었다고 존슨 씨는 설명합니다. 그러나 다중서버 구성을 취하게 한 결과, 인메모리캐시 Redis와 커넥션풀인 PgBouncer, 분산형 메시지큐 Kafka 등 서버가 여러 대 있어 발생하는 '추가 레이어'가 구성을 점점 복잡하게 했습니다.

Google에서 개발한 Kubernetes는 복잡한 시스템의 자동구축, 다운타임제로 서비스 업데이트 등을 가능하게 하여 많은 서비스에 채용되었습니다. 그러나 존슨 씨는 Kubernetes의 복잡성 그 자체가 가용성을 저해하고 있다고 지적합니다. Kubernetes는 뛰어난 시스템이지만, 도입하는 것이 항상 최적의 솔루션이라고는 할 수 없다는 지적은 여러 차례 나왔습니다.

이러한 배경에서 존슨 씨는 애플리케이션 개발을 단순화하기 위해 SQLite에 주목했습니다. SQLite는 경량 데이터베이스 관리시스템으로 MySQL이나 PostgreSQL처럼 서버역할을 하는 것이 아니라 응용프로그램에 탑재하여 이용한다는 점이 특징입니다. SQLite는 프로덕션 환경에서 사용하지 않는다고 생각하기 쉽지만, 존슨 씨는 SQLite에 대해 대량의 쿼리를 처리할 수 있는 능력이 있다며, SQLite를 이용한 제품이 존재하고 높은 기능을 갖추고 있다고 평가합니다.

하지만 SQLite가 프로덕션 환경에서 사용되지 않는 가장 큰 이유는 '복제 기능이 없다'는 점입니다. rqlite를 이용하면 복제는 가능하지만, 서버를 3대 준비해야 합니다. '더 쉽게 SQLite를 복제하고 싶다'는 욕구에서 존슨 씨가 개발한 것이 'Litestream'입니다.

Litestream은 SQLite를 Amazon S3에 복제할 수 있는 소프트웨어로, 매우 설치가 쉽고 저렴한 비용으로 이용할 수 있는 점이 특징입니다. Litestream 자체는 무료 오픈소스 소프트웨어이기 때문에 필요한 비용은 한 달에 1달러 정도의 S3 이용요금뿐이라고 합니다. 또한 현재 클라우드 서비스공급자는 몇 겹이나 중복을 확보하고 있으므로 그러한 서비스공급자의 가상머신 등을 서버로 이용하면 매우 높은 가용성을 얻을 수 있습니다. S3도 99.99%의 가용성과 99.999999999%의 내구성을 강조하고 있습니다.


Litestream를 이용한 구성의 스케일링에 대해서는, 고성능 CPU로의 대체와 RAM의 강화 등 서버 자체의 처리능력을 향상시키는 스케일업이 제일이라는 것. 다만 하나의 서버에서 처리할 수 없게 된 경우에도 SQLite와 Litestream는 배포가 간단하기 때문에 데이터를 sharding하여 서버를 늘리는 식으로 확장하여 시스템 전체의 처리능력을 향상시킬 수 있다고 존슨 씨는 설명합니다

Litestream의 구체적인 도입방법은 아래의 페이지에 게시되어 있습니다.

Getting Started - Litestream
https://litestream.io/getting-started/

Getting Started - Litestream

Getting Started This tutorial will get you up and running with Litestream locally and replicating a SQLite database to Amazon S3. By the end, you’ll understand the replicate and restore commands and be able to continuously backup your database. It assume

litestream.io

 

Posted by 말총머리
,