Computer >> 컴퓨터 >  >> 프로그래밍 >> Redis

Upstash Redis가 제공하는 실시간 코드 협업

소개

Codeshare와 같은 플랫폼이 어떻게 구축되는지 궁금하신가요? 좋은 개발자 경험을 유지하면서 이와 같은 서비스 확장 문제를 해결하려고 노력한 적이 있습니까? Bytecrowds를 구축하기로 결정했을 때 이 모든 작업을 수행하는 방법을 배워야 했습니다. 엄격한 연구를 수행한 후 텍스트 공유 기능을 제공하기 위해 Yjs를 사용하기로 결정한 후 데이터베이스를 선택해야 할 때가 되었습니다. 시중에는 옵션이 너무 많아서 단순성이라는 필수 키워드를 사용하여 목록의 범위를 좁혔습니다.

왜 Upstash를 사용하나요?

Upstash를 발견하기 전부터 저는 Redis®의 간단한 API에 관심이 있었습니다. 그러나 이를 기본 데이터베이스로 사용하면 확장(캐싱에도 필요할 수 있음) 및 지속성 유지와 같은 문제가 발생합니다. 동시에, 후원을 확보하기 전에 오픈 소스 소프트웨어 예산 책정에 매우 주의해야 합니다. 가끔 사용하지 않더라도 컴퓨팅 파워에 대한 비용을 지불하시겠습니까? 갑작스러운 트래픽 급증을 처리하고 새로운 기능을 게시하거나 기존 기능을 개선하거나 일부 버그를 수정하는 대신 인프라 작업에 몇 시간을 보낼 준비가 되어 있습니까? 나는 그렇지 않았습니다. 그래서 업스태시를 찾았습니다.

Upstash Redis 제품은 내 필수 기준 중 3가지와 일치합니다. 사용하기 쉽습니다 , 확장 용이 , 유연함 . 서버리스 클라이언트에서 사용할 수 있도록 즉시 사용 가능한 REST SDK와 짧은 대기 시간을 결합합니다(요구 사항). Bytecrowds의 경우에도 마찬가지), 글로벌 복제, 컴퓨팅 능력에 대한 종량제 계획 등을 예로 들면 제가 프로젝트에 이를 선택한 이유를 이해하게 될 것입니다.

앱 전체에서 Redis® 사용

Redis®를 프로젝트의 기본 데이터베이스로 사용하여 여러 서비스의 요구 사항을 충족하는 방법을 알아보세요. 맥락을 이해하기 위해 다음은 Bytecrowds의 흐름 다이어그램입니다.

Upstash Redis가 제공하는 실시간 코드 협업

Ably를 사용하여 요청의 IP 주소를 기반으로 데이터를 수집하는 사용자 정의 분석 엔진과 클라이언트 간에 텍스트를 동기화합니다.

메인 저장소

바이트크라우드는 다음 속성을 가진 Redis® 해시의 형태를 취합니다:

{
 text: string,
 language: string,
 authorizedEmails: undefined || string array
}

속성 중 하나가 변경되면 업데이트 사이에 "x"초의 지연을 두고 해시를 업데이트합니다. 프로덕션에서는 현재 100밀리초로 설정되어 있습니다.

인증 및 승인

인증

Bytecrowds는 Next.js를 사용하므로 GitHub OAuth 통합을 위한 확실한 선택은 Auth.js였습니다. 다행스럽게도 Upstash 어댑터를 활용하여 세션을 저장할 수도 있으므로 앱 전체에서 Redis®를 사용할 수 있습니다.

승인

Bytecrowds는 요청 시 authorizedEmails를 생성하여 인증을 처리합니다. 한 번 설정되면 API에서 변경할 수 없는 필드입니다. 제가 Redis®에서 좋아하는 점 중 하나는 알고리즘적으로 효율적으로 설계된 일상적인 작업을 위해 기본적으로 사용할 수 있는 다양한 기능입니다. 예를 들어 authorizedEmails이 있는지 확인하기 위해 해야 할 일은 모두 이미 설정되어 있는 것은 O(1) 복잡도를 갖는 HEXISTS 명령을 사용하는 것입니다.

분석

Bytecrowds는 두 가지 범주의 데이터를 처리하는 분석 시스템을 사용합니다:

  • year month day와 같은 이름의 Redis® 해시 형식을 취하는 일일 통계 다음 속성을 사용합니다:
{
 countries: string array,
 hits: integer,
 pages: string array,
 uniqueVisitors: integer,
 addresses: string array,
 continents: string array
}

여기서 addresses 고유한 웹사이트 방문자 수를 결정하는 데 사용되는 SHA256으로 암호화된 IP 주소 배열입니다.

  • continents라는 이름의 키 3개 , countriespages Redis® 정렬 세트가 데이터를 저장하는 데 사용되었습니다. 모든 통계를 해당 개수(정렬 세트의 경우 "점수")와 함께 저장함으로써 SORT 또는 SORT_RO와 같은 명령을 사용하여 쉽게 쿼리하거나 정렬할 수 있습니다. Redis의 단순함이 다시 한 번 드러납니다.

이 뒤에 있는 코드가 궁금하다면 https://github.com/Bytecrowds/analytics/blob/main/src/index.js를 확인하세요.

참고 :더 복잡한 시나리오에서는 처리하기 전에 원시 데이터를 저장하고 Apache Kafka와 같은 일종의 스트림 처리 도구를 사용하는 등 이 시스템에 몇 가지 변경 사항을 적용할 수 있습니다(Upstash도 이 작업을 처리할 수 있습니다. 문서를 확인하세요).

실시간으로 보기

Bytecrowd가 실제로 작동하는 모습을 보고 싶으십니까? https://www.bytecrowds.com으로 이동하여 "new bytecrowd" 버튼을 클릭하고 여러 탭에서 링크를 엽니다. 작성을 시작하면 연결된 모든 클라이언트에 코드가 복제되는 것을 볼 수 있습니다.

종료

오픈 소스 프로젝트의 유일한 활성 유지관리자가 된다는 것은 비밀이 아닙니다. 그러나 올바른 도구와 자동 확장 인프라를 갖추는 것은 트래픽 급증에 대해 걱정할 필요 없이 멋진 프로젝트를 계속 작업할 수 있도록 지원하는 큰 지원이 될 수 있습니다. 이미 Upstash Redis®를 사용해 보겠다고 확신하셨나요? 무료 계정에 가입하세요. 신용카드가 필요하지 않습니다.

전체 코드를 보려면 GitHub 저장소를 확인하세요. 이 기사에 대해 질문이나 피드백이 있는 경우 tudor.zgimbau@gmail.com으로 저에게 연락해 주세요.