牛腾

首页 » 常识 » 问答 » 牛逼,腾讯又一开源力作
TUhjnbcbe - 2022/4/7 11:38:00

哈喽,大家好,我是开源君,一个资深的互联网玩家,致力于为大家分享各领域优质开源项目。

今天给大家推荐的开源项目是「Flare后台服务开发框架」,这个框架是由腾讯开发的,主要的目的是提供针对目前主流软硬件环境下的易用、高性能、平稳的服务开发能力,这个框架堪称现代化的后台服务框架。

程序员们应该知道,腾讯广告是腾讯公司核心的业务之一,其后台采用了大量的C++开发的,腾讯也在大量招聘C/C++程序员,Flare就是广泛投产于腾讯广告后台的现代化C++开发框架。

很多小伙伴会问,Flare这个框架稳定吗,答案是,这个项目19年就有了,目前已经广泛应用在腾讯广告众多的后台服务,已经拥有了数以万技计的运行实例,各位工程师们,放心食用。

Flare特点现代C++设计风格,广泛采用了C++11/14/17/2a的新的语法特性和标准库提供了M:N的线程模型的微线程实现Fiber,方便业务开发人员以便利的同步调用语法编写高性能的异步调用代码支持基于消息的流式RPC支持除了RPC外,还提供了一系列便利的基础库,比如字符串、时间日期、编码处理、压缩、加密解密、配置、HTTP客户端等,方便快速上手开发业务代码提供了灵活的扩充机制。方便支持多种协议、服务发现、负载均衡、监控告警、调用追踪等针对现代体系结构做了大量的优化。比如NUMA感知的调度组和对象池、零拷贝缓冲区等高质量的代码。严格遵守GoogleC++代码规范,测试覆盖率达80%完善的文档和示例以及调试支持,方便快速上手如何上手构建

我们使用blade进行日常开发。

编译:./bladebuild...,

测试:./bladetest...。

之后就可以参考入门导引中的介绍,搭建一个简单的RPC服务了。

调试

我们相信,调试体验也是开发维护过程中很重要的一部分,我们为此也做了如下一些支持:

GDB插件用于列出挂起的fibers,支持各种Sanitizers

代码示例

#include"thirdparty/gflags/gflags.h"#include"flare/example/rpc/echo_service.flare.pb.h"#include"flare/example/rpc/relay_service.flare.pb.h"#include"flare/fiber/this_fiber.h"#include"flare/init.h"#include"flare/rpc/rpc_channel.h"#include"flare/rpc/rpc_client_controller.h"#include"flare/rpc/rpc_server_controller.h"#include"flare/rpc/server.h"usingnamespacestd::literals;DEFINE_string(ip,".0.0.1","IPaddresstolistenon.");DEFINE_int32(port,,"Porttolistenon.");DEFINE_string(forward_to,"flare://.0.0.1:","TargetIPtoforwardrequeststo.");namespaceexample{classRelayServiceImpl:publicSyncRelayService{public:voidRelay(constRelayRequestrequest,RelayResponse*response,flare::RpcServerController*ctlr)override{flare::RpcClientControllerour_ctlr;EchoRequestecho_req;echo_req.set_body(request.body());if(autoresult=stub_.Echo(echo_req,our_ctlr)){response-set_body(result-body());}else{ctlr-SetFailed(result.error().code(),result.error().message());}}private:EchoService_SyncStubstub_{FLAGS_forward_to};};intEntry(intargc,char**argv){flare::Serverserver{flare::Server::Options{.service_name="relay_server"}};server.AddProtocol("flare");server.AddService(std::make_uniqueRelayServiceImpl());server.ListenOn(flare::EndpointFromIpv4(FLAGS_ip,FLAGS_port));FLARE_CHECK(server.Start());flare::WaitForQuitSignal();return0;}}//namespaceexampleintmain(intargc,char**argv){returnflare::Start(argc,argv,example::Entry);}

更多Github项目使用方式,请复制下方开源项目地址研究学习

开源项目

1
查看完整版本: 牛逼,腾讯又一开源力作