gpRPC是基于BeetleX新版本开发的RPC通讯组件,使用Google Protobuf的功能。它实现了高性能和使用方便的PRC组件,希望在32核的云主机上达到百万级别的吞吐能力。组件需要使用proto文件来描述消息定义,并实现相关接口和添加属性标记。服务端实现的类需要使用RpcService标记,客户端使用RpcClient对象创建接口实例进行服务调用处理。性能测试结果显示,20连接2000并发的量延时较高,需要调整组件的内部机制来优化性能。
为了维护和调试C#项目,设计良好的程序日志规范很重要。建议使用不同级别的日志,采用标准格式记录时间戳、日志级别、线程ID、类名和方法名等信息。BeetleX通过定义日志记录接口和结构简化了日志记录过程。还定义了保存日志的接口和Console实现。组件的日志记录不会影响整体性能。
本文主要针对HTTPS和不同序列化组件响应体中的性能进行测试。测试结果显示开启TLS会有30%-40%的性能损耗。在响应对象测试中,Google.Protobuf.net组件表现最优,System.Text.Json也是不错的选择。作者计划更新techempower上的测试代码以验证BeetleX重构的效果。
本文介绍了使用BeetleX实现一个简单的HTTP服务的方法,并使用开源工具wrk进行性能测试。测试结果显示,响应1条记录的测试结果达到了110W RPS,响应100条记录的测试结果是32W RPS。测试用例的CPU基本都跑满,JSON序列化对CPU资源的消耗较大。文章还推荐了两款高性能的HTTP测试组件。
BeetleX新版本进入性能测试阶段,测试结果理想。每秒产生的IO读写数据量达到270万,CPU基本满负载。测试最有意义的是IO读写吞吐在相应CPU上的极限。
.NET框架提供了一些对象池,但有时需要自己编写简单的对象池。最近在优化BeetleX时发现一种更好的Lock使用方式,通过ArrayPool<T>的代码发现内部实现是使用LOCK+数据组来实现高效的线程安全Stack结构。测试结果显示,分区Stack和ConcurrentStack的性能基本一致,但内存占用有巨大差异。
Beetlex发布了新版本的代码,包括服务端、客户端和协议分析器功能。新版本在功能不变的情况下代码量减少了50%,可维护性更好。新版本的使用代码和日志处理更全面。
ReadOnlySequence是一个可读取非连续内存结构,适用于网络数据处理。通过构造函数和适配器实现了对非连续内存的读写和循环复用。还实现了一个Stream类,方便兼容第三方使用。
最近在重写BeetleX中的ReadOnlySequence Stream功能时遇到问题,无论传入什么参数,传到自定义的内部Stream总是byte[0]。经过调试发现问题出在一行代码上,试探性发起一个Read byte[0],导致功能无法正常使用。最后通过重写ReadAsync方法解决了问题。
新版本组件通讯功能重写完成,进入测试阶段。之前的测试工具只能用于简单性能测试,无法满足全面功能性测试。经过寻找,找到一款支持TCP、UDP和SSL的测试工具,免费使用。适合通讯服务。
这篇文章介绍了BeetleX编写协议分析的扩展类,该类封装了一些基础类型转换的方法,方便进行网络数据读写分析。这些方法支持Big Endian和Little Endian,默认为Little Endian。文章还提供了一个类型单元测试方法。
BeetleX正在重写,并分享了一些用于设计和封装的简单功能代码。文章介绍了使用ArrayPool类进行缓冲区分配和回收。还引入了一个TemporaryBuffer结构,以简化ArrayPool的使用。该结构在定义时自动分配内存,并重载了转换操作符以实现更简洁的使用。BeetleX是一个支持多种协议的开源跨平台通信框架。
完成下面两步后,将自动完成登录并继续当前操作。