이 기사는 CloudWeGo 2주년 기념 시리즈의 두 번째 기사입니다.
이번 공유 세션에서는 먼저 CloudWeGo의 사용성 구축에 대한 간략한 배경을 설명하고, 사용성 구축을 위해 수행한 작업을 소개하고 마지막으로 향후 작업을 기대하겠습니다.
01
배경
CloudWeGo는 엔터프라이즈 수준의 클라우드 네이티브 마이크로서비스 아키텍처를 신속하게 구축할 수 있는 ByteDance 인프라 서비스 프레임워크 팀이 오픈 소스로 제공하는 미들웨어 세트입니다. CloudWeGo의 프로젝트에는 고성능 , 높은 확장성 및 높은 신뢰성 이라는 세 가지 주요 특징이 있으며 , 오픈 소스 이후에는 사용 편의성 구축에 더 많은 관심을 기울입니다 . 이를 통해 활발한 커뮤니티 분위기를 형성하고 커뮤니티의 지속 가능한 발전을 촉진합니다. 사용 편의성은 사용자가 비즈니스 로직 개발을 신속하게 완료하고 효율성을 향상시키는 데 도움이 됩니다.
사용 편의성과 관련하여 우리는 R&D 경험, 사용자 경험 및 커뮤니티 홍보에 많은 노력을 기울였습니다. 아래에서 하나씩 소개하겠습니다. 또한, 이번 공유에서는 주로 Hertz와 cwgo 주변의 사용성 구축에 중점을 둘 예정입니다.
02
사용 용이성 기능 구성
기업 수준의 HTTP 프레임워크인 Hertz의 사용 용이성은 연구 개발 경험을 크게 향상시킬 수 있기 때문에 항상 우리가 매우 중요하게 생각하는 측면이었습니다. 따라서 우리는 오픈 소스 이후 항상 사용 편의성에 대한 사용자의 다양한 제안을 매우 중요하게 여기며 다음과 같이 요약했습니다. 첫 번째 문제는 일부 기능의 사용이 일반적인 프레임워크와 다소 다르기 때문에 마이그레이션이 발생한다는 것입니다. 사용자는 이에 익숙하지 않을 수 있습니다. 두 번째 문제는 프레임워크에 많은 스캐폴딩 도구가 있다는 것입니다. 예를 들어 CloudWeGo에는 Hertz와 Kitex라는 두 가지 스캐폴드가 있으며 이는 의심할 여지없이 사용자의 학습 비용을 증가시킵니다. 사용자 그룹의 문제와 사용자 피드백을 통해 현재 문서에 불명확한 설명, 콘텐츠 누락 등의 문제가 있어 사용자가 신속하게 해결할 수 없는 문제에 직면하게 되는 경우가 많다는 것을 알 수 있습니다.
위의 문제에 대응하여 우리는 사용자의 요구를 신속하게 지원할 수 있는 다양한 기능을 개발했습니다.
-
다중 프로토콜 지원 : 가장 먼저 도입되어야 할 것은 Hertz가 다중 프로토콜의 원활한 전환을 지원할 수 있다는 것입니다. 따라서 일부 오픈 소스 프레임워크는 이미 Hertz 프로토콜 계층의 확장 기능을 기반으로 합니다. , 우리는 http2/http3 구현을 완료했고 이를 hertz-contrib 아래에 두었습니다. 사용법은 매우 간단합니다. Hertz 엔진에 해당 프로토콜을 등록하기만 하면 됩니다. http3 프로토콜에 대한 지원도 유사하지만 Hertz가 확장한 quic 프로토콜의 전송 계층으로 전송 계층을 지정해야 합니다. 다른 작업은 http2와 동일합니다.
-
Response Writer 하이재킹 : 다음으로 Response Writer 하이재킹 기능을 소개하겠습니다. Writer hijacking을 소개하기 전에 Hertz가 메시지를 읽고 쓰는 과정(그림의 숫자 부분)에 대해 이야기하겠습니다. Hertz는 먼저 연결에 있는 데이터를 읽고 구문 분석한 다음 경로 일치, 비즈니스 로직 처리 및 응답을 생성합니다. 요청 내용을 기반으로 데이터를 전송합니다. 그리고 이러한 작업이 완료된 후 프레임워크는 데이터를 피어로 보냅니다. 이는 사용자 작업을 완전히 단순화할 수 있지만 일부 시나리오에서는 문제가 있습니다. 첫째, 사용자는 피어에 대한 실제 플러시 타이밍을 제어할 수 없습니다. 따라서 데이터가 점진적으로 생성되고 실시간 요구 사항이 높은 일부 시나리오에서는 사용자가 많은 제한 사항.
따라서 우리는 원래의 응답 작성 프로세스를 기반 으로 사용자가 비즈니스 핸들러/미들웨어에서 응답 작성자를 하이재킹하고 응답 데이터를 미리 피어에 다시 보내 보다 유연한 쓰기 요청을 달성할 수 있도록 지원합니다. 방법. Response Writer의 기능을 기반으로 핸들러 플러시, SSE, 스트리밍 Gzip 등의 기능을 구현했으며 더 많은 기능에 대한 여러분의 기여를 기대합니다.
-
매개변수 바인딩 재구성: 작성자 하이재킹을 소개한 후 중요한 기능인 매개변수 바인딩을 소개하겠습니다. 재구성 전에 Hertz의 매개변수 바인딩은 제3자 구현에 의존하여 다음과 같은 문제를 일으켰습니다.
이러한 문제를 해결하기 위해 우리는 매개변수 바인딩 기능을 재구성하고 그 구현을 애플리케이션 계층의 중요한 구현으로 Hertz 내부에 배치했습니다. 재구성 후에는 이전과 동일한 바인딩 규칙 및 사용 방법을 지원하며 더 나은 성능을 갖게 됩니다. 전보다 완전 좋아졌어. 또한 사용자가 익숙한 구문을 쉽게 사용할 수 있도록 사용자 정의 바인더 및 유효성 검사기도 지원합니다. 또한 모든 구성을 하나의 구조로 통합하고 이를 withOption 형태로 Hertz 엔진에 주입합니다.
-
타사 구현에 의존하여 사용자는 자신의 요구 사항에 대해 개발자에게 호소해야 합니다.
-
제공되는 인터페이스 수가 적고, 이주하는 학생의 학습 비용이 증가합니다.
-
성능이 좋지 않습니다. 이전 구현은 표준 http 라이브러리의 저장 모델에 적합하며 변환이 한 번 더 필요하며 성능이 좋지 않습니다.
-
위의 세 가지는 사용 편의성 측면에서 Hertz의 더 중요한 기능입니다.
03
생태건설
다음으로 허츠와 관련된 생태시공에 대해 소개해드리겠습니다.
현재 우리는 미들웨어 형태로 모든 사람에게 몇 가지 공통 기능을 제공하므로 개발자는 비즈니스 로직에 더욱 집중할 수 있고 미들웨어만 호출하면 이러한 공통 기능을 사용할 수 있습니다. 지금까지 우리는 기본적으로 대부분의 비즈니스 요구를 충족할 수 있는 인증/권한 부여, 보안, 성능, HTTP 일반 기능, 거버넌스 관찰 확장 기능 등을 포함하여 20개 이상의 미들웨어 확장을 제공했습니다.
물론 우리는 이러한 미들웨어 생태계 구축에 지속적으로 투자할 것이며, 누구나 커뮤니티 개발에 참여할 수 있습니다.
04
비계 최적화
아래에서 비계 도구의 최적화를 소개하겠습니다.
헤르츠
오픈 소스였을 때 Hertz의 스캐폴딩 도구인 hz는 이미 IDL 기반으로 서버를 생성하는 기능을 제공했습니다. 즉, 그림의 3, 4, 5번 부분을 지원했으며 현재는 라우팅 등록 및 핸들러 코드를 기반으로 자동 생성할 수 있습니다. IDL의 인터페이스 정의 및 기타 기능에 대해서는 통신 프레임워크로서 그림의 1, 2, 6 프로세스인 클라이언트 측 생성 작업도 완료해야 하므로 hz는 다음 기능을 지원합니다. 오픈 소스 이후 클라이언트 코드를 생성합니다.
클라이언트 생성의 주요 목적은 Hertz 클라이언트 초기화, 요청 전송 등 일련의 고정된 작업을 차단하고, 사용자에게 원클릭으로 HTTP 요청을 보낼 수 있는 기능을 제공하며, hz에서 생성된 서버와 직접 통신할 수 있는 기능을 제공하는 것입니다.
CWGO
다음으로 또 다른 도구인 cwgo를 소개하겠습니다. cwgo는 CloudWeGo Golang 프레임워크용으로 출시된 통합 도구입니다.
아래 그림에서 볼 수 있듯이 CloudWeGo에는 Golang 아래에 여러 코드 생성 도구가 있습니다. Kitex와 Hertz가 캡슐화 계층을 제공했지만 사용법이 여전히 약간 다르기 때문에 사용자의 학습 비용이 높습니다. 이 문제는 바로 cwgo가 해결하고자 하는 문제 중 하나입니다.
또한 CloudWeGo 커뮤니티의 Go 프로젝트는 현재 다음과 같은 문제에 직면해 있습니다.
-
API 관리 기능은 상대적으로 약합니다. IDL 자체는 전체 비즈니스 개발 반복 프로세스에서 인터페이스 설명/정의 도구로 사용할 수 있습니다. 그러나 CloudWeGo는 실제로 현재 기업 사용자와 연결할 때 명확한 실제 계획을 가지고 있지 않습니다. , 비즈니스 측면에서는 기본적으로 API 관련 관리에 집중해야 합니다.
-
각 구성 요소는 상대적으로 독립적이므로 함께 사용할 경우 원활하게 작동할 수 없습니다.
-
단위 테스트, DB 등의 공통 코드 생성 및 구성 부족
앞으로 CloudWeGo 오픈 소스 구성 요소의 수가 계속 증가함에 따라 단편화된 사용자 경험은 계속 단편화될 것입니다. 따라서 우리는 글로벌 관점에서 위의 문제를 해결하는 것을 목표로 CloudWeGo 올인원 도구 cwgo를 출시했습니다. 더욱 간단하고 사용하기 쉬운 마이크로서비스 생성 및 관리 양식을 제공합니다.
cwgo의 여러 기능을 소개하겠습니다.
-
cwgo는 hz/kitex 스캐폴딩 기능을 통합하고 명령을 추상화 및 단순화하여 cwgo 도구에 균일하게 표시합니다. 또한 사용자가 RPC를 사용하든 HTTP를 사용하든 생성된 구조, 주석, 유효성 검사기 및 기타 기능을 열 수 있습니다. 사용자에게 통합된 코드 생성 경험 제공
-
대화형 명령줄인 이 기능은 초급 사용자를 위한 것입니다. 대화형 형식으로 사용자를 위한 대상 코드를 생성하므로 사용자는 단 몇 번의 클릭만으로 마이크로서비스 생성을 완료할 수 있습니다.
-
우리는 비즈니스의 신속한 개발 및 구현을 지원하고 향후 반복 및 유지 관리를 용이하게 하기 위해 오른쪽 그림과 같이 기업의 요구 사항에 더 잘 맞는 mvc 템플릿을 생성할 것입니다. 또한 cwgo는 사용자 정의 템플릿, 템플릿 호스팅 및 유지 관리를 지원합니다. 다른 기능을 통해 템플릿 관리 및 신속한 교체를 더욱 쉽게 완료할 수 있습니다.
-
현재 Hertz와 Kitex의 약자인 Hex Plan이라는 이름의 새로운 마이크로서비스 배포 양식을 cwgo에서 제공합니다. Hex 계획의 목표는 마이크로서비스가 동일한 포트에서 HTTP/RPC 요청을 동시에 모니터링하고, 프로토콜 스니핑을 기반으로 제로 오버헤드 요청 배포를 달성하고, 처리를 위해 요청을 Hertz 및 Kitex에 배포할 수 있도록 하는 것입니다. 이는 기업이 rpc 서비스를 위한 HTTP API 인터페이스를 제공해야 할 때 R&D 효율성, 복잡성 및 성능의 많은 타협을 해결할 수 있습니다. 현재 이 기능은 cwgo에서 공식적으로 출시되었으며 누구나 필요에 따라 경험할 수 있습니다.
05
사용자 경험 최적화
문서 최적화 : 오픈소스 이후 CloudWeGo 하의 프로젝트들은 항상 문서 문제에 주의를 기울여 왔지만, 문제가 있을 때마다 어딘가에서 수정되어 문제를 종합적으로 해결할 수는 없습니다.
따라서 우리는 CCF GLCC 프로젝트에 참여하여 특별 문서 최적화 프로젝트를 시작했습니다. 이 특별 프로젝트에서는 주로 다음 작업을 수행했습니다.
-
코드, 그림, 내용 등 문서를 종합적으로 다시 경험하고 관련 이슈를 기록합니다.
-
기록된 관련 문제를 바탕으로 문서 최적화를 위한 전담 인력을 배치하여 혼란스러운 논리, 불명확한 설명 등 일부 문제를 해결하고, 신규 사용자를 위한 튜토리얼 및 Hertz 핵심 기능과 같이 일반적으로 사용되는 문서를 최적화하는 데 중점을 둡니다. 피드백에 따르면 최적화된 문서는 이미 기본적으로 모든 일반적인 문제를 해결할 수 있습니다.
-
또한 더 나은 시각적 경험을 제공하기 위해 문서 형식과 디렉토리 구조를 통일적으로 조정했습니다.
현재 이 최적화 프로젝트는 다른 CloudWeGo 프로젝트에서 진행되고 있습니다. 문서 문제에 대한 피드백도 환영합니다.
샘플 코드 라이브러리 : 둘째, 풍부한 샘플 코드 라이브러리를 제공합니다.
현재 우리는 일반적으로 사용되는 모든 기능의 실행 가능한 사용 예를 포함하고 정기적으로 업데이트 및 유지 관리되는 hertz-example 및 kitex-example 코드 라이브러리를 제공합니다.
또한 기업이 CloudWeGo 프로젝트를 사용하여 비즈니스 로직 개발을 보다 빠르게 완료할 수 있도록 실제 시나리오의 여러 데모를 제공하고 있으며, 현재 Hertz 및 Kitex를 사용하여 다음과 같은 비즈니스 코드를 개발하고 있습니다. , 이를 기반으로 비즈니스 로직을 확장하여 비즈니스의 신속한 출시를 완료할 수 있습니다.
-
Bookinfo : Hertz+Kitex를 사용하여 IstioBookinfo 다시 구현
-
Easy Note : Hertz+Kitex 마이크로서비스를 활용한 메모 서비스 구현
-
서점 : Hertz+Kitex를 활용한 전자상거래 사례 구현
-
개방형 결제 플랫폼 : Hertz+Kitex를 활용하여 다수의 가맹점을 지원하는 개방형 결제 플랫폼 구현
CSG 활동 : CSG 활동은 개발자가 소스 코드를 이해하고 프레임워크를 최대한 활용하는 데 도움을 주기 위해 정기적으로 개최됩니다.
지금까지 CSG 이벤트는 5회 개최되었으며, 개발자들이 프레임워크를 더 잘 이해하고 사용할 수 있도록 Hertz/kitex/volo 프레임워크의 많은 소스 코드와 모범 사례를 소개했습니다. cloudwego/커뮤니티 웨어하우스의 이슈에 대한 이슈 소개 및 이전 활동 재생을 볼 수 있습니다.
06
전망
앞으로도 우리는 사용자에게 더 나은 R&D 경험을 제공하기 위해 Cloudwego의 사용 편의성에 지속적으로 투자하고 개선할 것입니다.
-
Universal R&D 프로세스: 사용자에게 직접 사용할 수 있는 전사적 수준의 R&D 프로세스 세트를 제공하고, 다양한 프레임워크와 협업하여 효율적인 비즈니스 개발의 전체 프로세스를 완료합니다.
-
API 원스톱 관리: CloudWeGo 프로젝트의 API 관리 방식을 일원화하고, 설명, 개발, 테스트의 전 과정을 원스톱으로 완료합니다.
-
분산 IDL 관리 : IDL& 제품, 비즈니스 코드를 별도로 관리하여 유지관리 비용을 절감합니다.
-
-
CWGO x LLM: LLM을 기반으로 더욱 지능적인 지원 기능 제공
-
지능형 코드 생성: IDL에 비즈니스 설명을 추가하고 LLM을 결합하여 코드 생성 시 비즈니스 코드 로직을 채웁니다.
-
문서 자동화: 자동 문서 작성, 최적화, 번역, 오류 수정 등
-
프로젝트 주소
GitHub: https://github.com/cloudwego
공식 웹사이트: www.cloudwego.io