未找到

未发布 【示例教程】LEADTOOLS中如何使PACS服务器管理器支持H264
by Harriet666 keys 分享 1510818869321
LEADTOOLS可帮您开发出功能强大的文档图像应用程序。其主要功能包括综合图像注释,专业的黑白图像显示(例如灰度级和偏黑),以及专业的黑白图像处理。其它功能包括对黑白图像的性能和内存进行优化,文档图像清理(包括倒置文本,去边界,去打孔机和去线)以及使用LEADTOOLS Fast TWAIN和WIA进行扫描。
 
上一篇文章讲述了如何使用H.264压缩数据创建DICOM文件(参见:如何使用H.264压缩视频创建DICOM文件)。创建文件是一个比较困难的点,但是如何利用并使这些文件存储在PACS服务器中也是很重要的。默认情况下,H.264压缩不能由LEADTOOLS PACS服务器管理器支持,但它很容易可以通过添加几行代码来实现。本篇文章将讲解如何将H.264支持添加到PACS服务器管理器。
 
为支持IODs我们需要更新开发包。这个项目可以在这里的SDK安装中找到:
\Examples\DotNet\PACSFramework\CS\Sample AddIns\Leadtools.AddIn.Store
 
我们需要更新StoreAddin.cs中的StoreAddin类。在前面的示例中,我使用的SOP类是视频摄影图像存储。所以需要寻找这样的代码,并添加DICOM UID类型MPEG-4 AVC/H.264 Blu Ray兼容和MPEG-4 AVC/H.264 High Profile Level 4.1.。最终变成这样:
[PresentationContext(DicomUidType.VideoPhotographicImageStorage, DicomUidType.ImplicitVRLittleEndian,
                                                         DicomUidType.JPEG2000,
                                                         DicomUidType.JPEG2000LosslessOnly,
                                                         DicomUidType.JPEGBaseline1,
                                                         DicomUidType.JPEGExtended2_4,
                                                         DicomUidType.ExplicitVRBigEndian,
                                                         DicomUidType.ExplicitVRLittleEndian,
                                                         DicomUidType.JPEGLosslessNonhier14,
                                                         DicomUidType.JPEGLosslessNonhier14B,
                                                         DicomUidType.Mpeg4AvcH264BdCompatibleHighProfileLevel_4_1,
                                                         DicomUidType.Mpeg4AvcH264HighProfileLevel4_1)]
如果你还想支持MPEG-2压缩,这也可以这样做:
[PresentationContext(DicomUidType.VideoPhotographicImageStorage, DicomUidType.ImplicitVRLittleEndian,
                                                         DicomUidType.JPEG2000,
                                                         DicomUidType.JPEG2000LosslessOnly,
                                                         DicomUidType.JPEGBaseline1,
                                                         DicomUidType.JPEGExtended2_4,
                                                         DicomUidType.ExplicitVRBigEndian,
                                                         DicomUidType.ExplicitVRLittleEndian,
                                                         DicomUidType.JPEGLosslessNonhier14,
                                                         DicomUidType.JPEGLosslessNonhier14B,
                                                         DicomUidType.Mpeg4AvcH264BdCompatibleHighProfileLevel_4_1,
                                                         DicomUidType.Mpeg4AvcH264HighProfileLevel4_1,
                                                         DicomUidType.MPEG2MainProfileHighLevel,
                                                         DicomUidType.MPEG2MainProfileMainLevel)]
代码修改完成后,进行编译。DLL将输出到PACSAddins目录:
\Bin\DotNet4\x64\PACSAddIns\
 
dll文件需要复制到插件目录的PACS服务器管理器。我的配置和运行的是64位服务器,文件夹位置:
C:\LEADTOOLS 19\Bin\Dotnet4\x64\L19_SERVER64\AddIns
 
您需要停止并重新启动服务器以便生效。
 
注:一定要停止所有已经运行的x64 PACS服务,然后重新启动。这是为了确保leadtools.dicom.server.exe完全删除,然后重新加载。

试用、下载、了解更多产品信息请点击"咨询在线客服"  

未发布 Oracle再次被曝漏洞,影响33万用户
by Harriet666 keys 分享 1517562136241

来自ERPScan公司的安全专家们发现了这个编号为CVE-2018-2636的漏洞。这个漏洞来自Oracle MICROS系统内的销售点(Point-of-Sale)终端,可能被利用来从硬件内无需验证地读取敏感资料。

ERPScan发布的漏洞分析内这样写道:“CVE2018-2636标记了一个Oracle MICROS系统内的文件夹遍历时暴露出的漏洞。如果公司内部有人得到了某个关键文件夹的路径,他就能从一台终端中偷取许多关键的资料,包括服务日志以及一些包含着用户名和密码的信息,甚至可以使用这些密码去连接数据库,获得更多关于服务器端之类的信息。”

“攻击者们能够获得数据库用户名以及哈希过后的密码,将密码暴力破解然后获得数据库内部商业资料的所有权限。而且还有许多不同的利用这个漏洞的攻击方式,导致整个MICROS系统处在危险之中。”

Oracle的MICROS系统在世界范围内拥有超过330000的现金注册用户,涵盖了许多食物卖场(200000+)以及酒店(30000)。

研究者还解释道,对一个本地攻击者来说要获取到MICROS销售点终端的URL路径是很简单的。

例如,他可以找到一个商场的电子秤或者其他使用RJ45点硬件,将其连接到Raspberry PI(树莓派),然后扫描整个内部网络。另一个选项是可以通过这些暴露在因特网上的设备来定位。截止本稿完成之时,共有139个MICROS销售点系统暴露在因特网上,其中大多数位于美国及加拿大。

Oracle33

这并不是MICROS首次遭到质疑,2016年时就曾经有黑客通过客户售后支持中心入侵MICROS系统。

分析报告最后总结道:“如果你想保护你的系统免受网络攻击的危害,你必须持续地保持更新,安装所有安全补丁。在这个案例中,特指Oracle在2018年1月的更新。”

未发布 多功能文件格式转换器VectorDraw File Converter v7.7010.1.0发布丨附下载
by Harriet666 keys 分享 1489477935745

VectorDraw File Converter是一个终端应用程序,使得用户能将常用的图像文件(DWG,DGN和DXF)转换为VectorDraw格式标准(VDF,VDI),反之亦然。该工具能将上述文件导出为SVG与DWF格式。VectorDraw File Converter还能进行多种文件的转换(比如*.dwg 到 *.vdf或者 *.dxf,反之亦然)。

VectorDraw File Converter更新至v7.7010.1.0,新版本针对提出的需求和bug做了调整和优化。

【VectorDraw File Converter v7.7010.1.0点击下载>>>】

未发布 图表编辑器TMS Diagram Studio更新至v4.14,支持RAD Studio 10.2 Tokyo
by Harriet666 keys 分享 1508403820628

TMS Diagram Studio是一款功能强大的图表控件,专为您的应用程序添加示意图和流程图表。

TMS Diagram Studio点击下载>>>


v4.14
  • 改进:更改handle检测的顺序。
  • 修复:预览/打印错误。
  • 修复:TDiagramButtons控件显示所有类别,而不考虑DiagramCategories属性的值。
v4.13
  • 新增:支持RAD Studio 10.2 Tokyo
v4.12
  • 修复:RoundRect块在使用GDI或GDIPlus/Direct2D时显示不同
  • 修复:使用Direct2D导出到位图不包含背景图像
V4.11
  • 修复:链接不与块一起移动
v4.10
  • 新增:TCustomDiagramBlock.CornerRadius属性,用于在使用圆弧形状时对圆角进行微调
  • 改进:在一次性清除或删除许多图表对象时提高性能
  • 修复:预览位图横向定位
  • 修复:移动具有线路的组将导致组成员错位
  • 修复:图形工具栏在设计时的高度不正确
v4.9.1
  • 修复:C ++ Builder 2007标题未正确生成。

【干货】扫描识别控件Dynamic Web TWAIN在线示例汇总
by Harriet666 keys 分享 1509086706928
Dynamic Web TWAIN是一个专为Web应用程序设计的TWAIN扫描识别控件。你只需在TWAIN接口写几行代码,就可以用兼容TWAIN的扫描仪扫描文档或从数码相机/采集卡中获取图像。然后用户可以编辑图像并将图像保存为多种格式,用户可保存图像到远程数据库或者SharePoint。这个TWAIN控件还支持上传和处理本地图像。
 
Dynamic Web TWAIN能够在所有主流浏览器上面进行网页扫描。兼容 Firefox, Mozilla , Chrome , Safari , Opera以及其他的浏览器;目前主要有三个版本:ActiveX, Plugin 和 Mac。
 
本文为大家整理了Dynamic Web TWAIN在线示例,欢迎收藏!
 
Dynamic Web TWAIN在线示例Demo>>>
Dynamic Web TWAIN示例:扫描文档和读取条形码
Dynamic Web TWAIN示例:上传文件并执行服务器端OCR
Dynamic Web TWAIN示例:扫描驱动程序许可证和提取信息
Dynamic Web TWAIN示例:使用jQuery扫描高级查看器的文档
Dynamic Web TWAIN示例:扫描文档并执行服务器端OCR
Dynamic Web TWAIN示例:用扫描仪和网络摄像头捕获图像
Dynamic Web TWAIN示例:使用Thumbnails View扫描文档
Dynamic Web TWAIN示例:使用条形码分离器自动进行文档分类
Dynamic Web TWAIN示例:全功能演示
Dynamic Web TWAIN示例:扫描文件并上传到文件系统

 Dynamic Web TWAIN v13.1最新版下载>>>

未发布 组件套包Essential Studio for UWP 2017 v3发布丨附下载
by Harriet666 keys 分享 1503047294687
Essential Studio for UWP是包含有35 +组件的综合套包,包括最快的图表和网格组件。所有组件根据当前被呈现的设备系列自适应渲染。
 
Essential Studio for UWP 2017 v3下载>>>
 
Essential Studio for UWP 2017 v3为图表添加了一个新的选择器控件,轴刻度中断,以及支持甘特图控件的样式定制。
 

选择器

新控件

新的选择器控件可以从自定义或模板化的视图项目列表中选择一个项目。 此控件也可以作为对话框打开。
 

主要特征

  • 多列
  • 标题视图
  • 页脚视图与默认按钮
  • 项目模板
  • 自定义视图
b09ae2e16b7b4548997fd85d9064d3b1ojpg
 

图表

轴刻度中断

为图表控件提供了轴刻度中断支持。
998e0388e6704793b6aae3b4ee595364ojpg

气泡图拖动

在编辑数据值时,可以拖动气泡图。
aae1f4f56c964ed0b154d3f1868d29afojpg
 

图表

增强注释功能

注释支持交互。可以选择、拖动、调整大小并旋转。
e7f8ec77acdf419884a70b8ed5cda9d0ojpg
注释可以根据它们对齐的段自动旋转。
df09b81ba8a44e018e71932daa9d05d5ojpg
 

DOCIO

内容控件

DocIO能够在Word文档中创建和修改内容控件,并提供了一种设计具有以下功能文档的方法:
  • 创建一个类似表单的用户界面。
  • 防止用户编辑内容控件的内容。
  • 将内容绑定到XML数据。
e2e9818108454cf89c71f68feb03e43bojpg

支持Word转为EPUB

DocIO现在支持将Word文档转换为EPUB文件。
e5f20473c82c4a879aa48bb4447896a3ojpg
 

PDF

电子签名

使用PKCS#12证书与私钥数字签名文件,如.pfx文件。
239e191ec51446cea0c4d87ae7234256ojpg

标记PDF

通过允许用户创建PDF/通用可访问性(PDF / UA)或符合章节508的PDF文档来提供辅助功能。
22c6e8fcb80842788604700039fc5cdeojpg
 

PDF查看器

弹出式注释

PDF Viewer现在允许用户添加和操作PDF文档中的弹出式注释。
6119b591b4ea42ba8da83729839ac92eojpg
 

Pivot客户端

关联数据源

Pivot客户端支持在嵌入式枢轴网格和枢轴图表中可视化关系数据。 它还提供一个UI选项来拖动字段,过滤它们,并在运行时通过数据透视表字段列表创建pivot视图。
60ced88f208d4aa08f6f8d4dcda1c94aojpg
 

演示

支持插入列

演示文稿现在允许在PowerPoint演示文稿中的表中插入列。
8f97c3756b8248379e75f15f1eed84e1ojpg
 

甘特图

样式

支持定制网格标题、时间刻度、前置连接器、任务标签和资源标签的样式。
d058eb1fb44047ac8ac5e9d1a6b12f52ojpg
 

事件和方法

增加了新的可用性事件和方法。
 

本地化

支持本地化控件中的静态文本。
 

看板

本土化

支持本地化控件中的静态文本。
 

XLSIO

过滤器功能增强

  • XlsIO现在允许用户通过文本、数字、单元格颜色和字体颜色对过滤的数据进行排序。
  • 提供基于自定义文本过滤器过滤数据的功能。

da8d1b8e95894d6ea168a87b3b71054eojpg
未发布 【推荐】2017年你应该了解的11款新型编程工具
by Harriet666 keys 分享 1503912408799
对于开发人员来说,工具是至关重要的。工具可以使开发人员的日常工作更加轻松、高效,因为只要关注最重要的事情即可。想要寻找到更好的替代工具往往比坚持使用熟悉的、过时的工具要困难得多。在这篇文章中,我们将列出你可以在日常工作中使用的一些新的编程工具。对在线流媒体感兴趣的许多开发人员也已经开始在其开发环境中使用这些新工具,因为这些工具与其陈旧的设施相比具有明显的优势。
 
你可能会想,如果旧的工具可以完成工作,那么是否还有必要去寻找新的替代工具呢?可以肯定的说,技术始终在变革,它正在不断地塑造、改变我们的工作方式,所以,它有必要保持更新。此外,新开发工具可以通过自动化在某些方面为你的工作增添更多价值,从而更好地帮助你控制你的工作流程。所以,如果你现在确信并准备好考虑使用市场上一些新的编程工具,请继续阅读本文,以找出其中最好的、最适合你的工具。
 

1. LiveEdu


LiveEdu 是开发人员和工程师经常光顾的好地方。它是一个基于项目的学习平台,服务于游戏开发、设计、数据科学、编程、增强现实、人工智能以及虚拟现实等方面的技能提升。学习的关键在于项目的真实性,而且 LiveEdu平台还提供了蕴含许多不同主题的项目教程,可以适用于任何人,包括初学者。
 

2.Standup


Standup 对于监控团队开发进度而言是一款非常好的工具。它可以很好地集成所有你已经在用的流行工具(例如Trello、BitBucket、GitHub等)。那么接下来,它是如何工作的呢?首先,它会根据开发团队成员的提交历史完全自动地生成工作报告。这有助于团队成员之间轻松地实现信息共享,也让团队成员之间形成了积极的竞争关系。这一想法是由Mesh Studio提出的,当时他们正在完成一个客户的严格的汇报需求的合同工作。
 

3. Cell 

Cell 自称是“自驱动的网页应用开发框架”。“框架”这一关键词应该会立刻让你想到,它应该包含APIs、方法、或其他框架应该具备的功能。但是,Cell却提供了一种全新的方式来查看如何编写HTML 代码。它适用于3个简单的规则,而且不运行任何函数就能够自主构建DOM。此外,Cell还提供了一种类似写小说的方式(a novel approach)来开发网页应用。
 

4. Osquery

Osquery 是 Facebook 通过 Query 语言揭示操作系统的方法。虽然乍看起来并不是很有趣,但它其实具有很多实际的用途。例如,它可以用于获取通过USB连接的硬件设备的列表。
 
对于那些想要保护自己的应用程序免受安全漏洞影响,或是能够更好地监视其应用程序在不同系统上的性能的Web开发人员来说,其中一个相对比较有效的方法就是不使用底层函数或API交互的能力。

 

5. React Native Firebase

React Native Firebase 可以帮助开发人员更加轻松地使用 React Native 和Firebase。利用RN Firebase,你可以 在Android和iOS系统上使用 JavaScript bridge轻松访问本地 eFirebase SDK。
 

6. Warp

Warp 是一款非常简单的工具。它可以让任何人分享他们的终端。共享终端就像输入一个 warp open 命令一样简单。这可以帮助开发人员或主机供应商轻松地分享彼此的终端。这款工具的关键特征在其“安全性”和“易于传输”。让分享变得前所未有地容易!你很快就会忘记SSH 的必要性,并使用该功能与远程团队和新成员进行互动。
 

7. Draft

Draft 是一款新工具,可以帮助开发人员轻松地在 Kubernet上构建应用程序。截至目前为止,在把应用移动到版本库之前,对应用程序进行测试仍然是一项耗时且艰巨的工作。但是,利用 Draft,开发人员就可以针对“内部循环”并在Kubernetes开发沙箱中对应用程序进行测试。沙箱可以通过公共URL轻松获得,并可以使用本地编辑器进行修改。
 

8. Docsify 

Docsify 是一个文档站点生成器工具。但是,它与其他的静态HTML文件生成器却是完全不同的。利用Docsify,你可以使用 Markdown 文件生成你的站点。这样一来,你就可以修改Markdown中的代码,并及时看到更新。这种差异性使它与其他流行工具(例如GitBook等)相比也能占据明显的竞争优势。


9. Prismic IO 

Prismic IO 是一个无头CMS系统的后台应用。多亏了API,让它可以与任何站点和应用程序一起使用,并可以轻松地与现有系统进行集成。此外,CMS 还为营销人员提供了一些现代化的发布和创作工具。


10. Javalin

Javalin 为Kotlin和Java提供了简单的REST API。该REST API非常易于使用,且API也是非常流畅的。它不是一个框架,因此不应该被混淆。其目的主要是提供一个非常简单易用的轻量级 REST API库。
 
以下是用Kotlin实现的 “Hello World”API的示例:
import io.javalin.Javalin
funmain(args: Array) {
    val app = Javalin.create().port(7000)
    app.get("/") { ctx -> ctx.result("Hello World") }
}


11. Bootsnap

我们都知道,速度对于一些应用程序而言有多重要。Ruby的性能可谓是臭名昭著。然而,Bootsnap尝试通过缓存很多Ruby方法并提高其整体性能来加快其速度。Bootsnap可以以gem的形式轻松地插入你的应用程序中,它目前可用于 MacOS 和 Linux 系统。
未发布 GIS软件开发工具包TatukGIS Developer Kernel v11.6发布丨附下载
by Harriet666 keys 分享 1499072156533
GIS定制开发首选控件,帮您轻松搞定高效、优质、实惠的GIS解决方案

TatukGIS Developer Kernel(DK)是一个用于开发自定义地理信息系统(GIS)应用程序以及解决方案的综合性软件开发工具包(SDK)。众所周知,构建一个庞大的地理信息系统需要花费大量的金钱和人力,而TatukGIS却是同类产品中性价比最高的控件,TatukGIS Developer Kernel DK因其功能强大,价格适中,已被超过 50个国家的个人、公司、以及政府等客户用来实现其地理信息系统解决方案。根据不同地首选开发环境,本产品分别以五个独立产品的形式提供(即VCL、.NET/WPF、ActiveX、Compact Framework和ASP.NET),各个产品使用相同的框架、应用程序编程接口(API)技术。
 
TatukGIS Developer Kernel v11.6最新版点击下载>>>
 
TatukGIS Developer Kernel v11.6更新内容
此版本为移动平台和FMX带来了很多改进和GUI修复以及一些新功能。
  • 等时线分析。[DK-9208]
  • 添加Concave Hull。[DK-9217]
  • Convex Hull速度提升。[DK-9324]
  • DK.FMX对话框以匹配VCL和Winforms。[DK-9075]。
  • 引入属性TGIS_ViewerWndHelper.DelayedUpdate延迟更新的细粒度控制。[DK-9301]
  • 图例未打印。[DK-9360] 
  • 问题是特定于DirectX渲染。临时解决方法是将渲染器设置为GDI32(仅限VCL)或GDI +(VCL和WinForms)。请参阅使用除默认值之外的渲染器。
  • 改进了Legend属性表单及其子表单在速度,外观和稳定性方面。
  • 一些程序名称更改,如TGIS_ContourGenerator.Import→Generate[DK-6369]
  • PrintClipboard现在支持DK.FMX。[DK-9418]
  • 提供独立SVG符号库编译器。
  • 其他问题修复。

试用、下载、了解更多产品信息请点击"咨询在线客服"   
未发布 慧都璀璨14年 周年狂欢送iPhone X!
by Harriet666 keys 分享 1509515785998
2017慧都十四周年狂欢搞事情,全场产品折扣风暴来袭!砸金蛋100%抽现金红包、满额豪送iPhone X、iPhone 8、DevExpress汉化免费送、团队升级培训套包劲省10万元......更多惊喜等您来探索!

2003年11月,慧都破茧而出;

2017年11月,慧都已崛世而立。

14岁了,搞件大事情——创造折扣奇迹!

这个狂欢月,就要躁!起!来!

七大玩法,花样玩赚周年趴!

狂欢时间:2017.11.1-2017.11.30

下单即送砸金蛋机会 100%抽微信现金红包

188元、88元、18元等你领取!

 

点击参与

 

 

全场满额豪送iPhone X!

---------------------

购买慧都任意产品

满额即送8级好礼

iPhone X、iPhone8速速领走!

 

点击查看

 
 

DevExpress庆周年

---------------------

DevExpress汉化资源免费送

DEV团队培训套包

最高立省10

 

点击查看

 
 

慧都学院培训“拼拼团”

---------------------

不要998!不要888!

只要1分钱

立抢DevExpress/Kendo UI研修班团购优惠名额!

 

立即抢购

 

 

全场热销产品7折起

---------------------

Kendo UI、Aspose、BCGSoft、Dynamsoft等产品

超低折扣等你来!

葡萄城GrapeCity更享专属折扣

 

查看更多

 
 

在线商城 聚惠再续

---------------------

MyEclipse个人授权低至6.9

在线订购商城全场优惠促销

下单还送砸金蛋机会

 

立即查看

 
 

周年送祝福 好礼齐掉落

---------------------

您送祝福,我送好礼

提交周年祝福、评价等

随机获取定制台历、保温杯或雨伞!

 

立即留言

 

关注的产品没在促销活动中?不用担心,点击咨询在线客服有意想不到的惊喜哦!

点击咨询获取惊喜优惠

咨询热线: 400-700-1020(免费)
本次活动最终解释权归重庆慧都科技有限公司所有
未发布 百度正式开源其RPC框架brpc
by Harriet666 keys 分享 1506650334597
9月14日,百度正式在GitHub上基于Apache 2.0协议开源了其RPC框架brpc。brpc是一个基于protobuf接口的RPC框架,在百度内部称为“baidu-rpc”,它囊括了百度内部所有RPC协议,并支持多种第三方协议,从目前的性能测试数据来看,brpc的性能领跑于其他同类RPC产品。
 
brpc开发于2014年,主要使用的语言是C++和Java,是百度内部使用最为广泛的RPC框架,它经受了高并发高负载的生产环境验证,并支撑了百度内部大约75万个同时在线的实例。据了解,百度内部曾有多款RPC框架,甚至在2014年时还开源过另外一款RPC框架sofa-pbrpc。那brpc是在什么样的背景下诞生的?它有什么样的优势?又为何要开源?就这些问题,InfoQ记者采访了brpc负责人戈君。
 
Q:谈谈brpc的一些基本情况?什么时候开始研发的?经过了怎么样的迭代和升级?目前在内部应用情况如何?

戈君:brpc于2014年创建,在百度内部称为“baidu-rpc”。到目前为止,brpc一共进行了3000次左右的改动,现在仍在持续优化中,百度内的wiki上可以查询到每次改动的描述。brpc的主要语言是C++和Java,对其他语言的支持主要是通过包装C++版本,比如brpc的Python版包含C++版的大部分功能。
 
brpc目前支撑百度内部大约75万个同时在线的实例(不含client),超过500种服务(去年的统计,现在已不统计这类数据)。Hadoop、Table、Mola(另一种广泛使用的存储)、高性能计算、模型训练、大量的在线检索服务都使用了brpc。brpc第一次统一了百度内分布式系统和业务线的通信框架。
 
Q:为什么百度当时要研发brpc?

戈君:我们在实践中意识到,RPC作为最基础的通信组件,当时的百度已经不领先了。我当时的经理刘炀曾是Google的工程师,非常重视基础架构的建设,也愿意在这个方向投入资源。
 
我们在内部会更加深入地讨论这些问题。“好用”有时看起来很主观,但其实还是有据可循的,它的关键点是能不能真正地提高用户的效率:开发、调试、维护都要考虑到,如果用户效率真的被提高了,用户会想着你的,靠吹嘘或政令推广的东西得不了人心。我们创建brpc的初衷是解决百度业务所面临的实际挑战,同时也希望成为百度同学最喜爱的工具,哪怕离开百度也会怀念brpc。我们希望在提供了一个好用框架的同时,也展现了一种工作方法:注释怎么写,日志怎么打,ChangeLog怎么写,版本怎么发布,文档怎么组织,甚至对未来不在百度的同学的工作也有帮助,所以从这点来说brpc从一开始就是拥抱开源的。事实上,我们在口碑上做得还不错,brpc的wiki可能是百度内被点赞最多的内容之一。
 
Q:与其他的一些开源的RPC框架相比,brpc的优势是什么?

戈君:brpc主打的是深度和易用性。一方面我们没有精力像gRPC那样摊大饼,什么都做。另一方面我们也注意到gRPC(包括更早的Thrift)的深度和易用性并不够。技术方面的东西就是这样,看示例程序,文档非常牛逼,但实战中可能就是另一回事了,为什么各个公司都要造自己的轮子,一个隐藏原因就是表面高大上的东西在一些细节上让你无法忍受。

RPC真正的痛点是什么?是可靠性、易用性和定位问题的便利性。服务中不要出现不可解释的长尾,程序的可变项要尽量少,各种诡异问题要有工具支持快速排查。而这些在目前开源的RPC框架中做的并不好,它们大多看着很牛,但就是无法在自己组织中推广开来。回到前面那三点,brpc是如何做的呢?
  • 可靠性。这一方面是代码质量问题,通过为brpc团队设立很高的招聘门槛,以及在团队中深入的技术讨论,我们确保了稳固的代码基础。另一个问题是长尾问题,这是设计问题,brpc其实包含了很多模块,其中的bthread是一个M:N线程库,就是为了更好地提高并发避免阻塞。brpc中的读和写都是wait-free的,这是最高程度的并发。技术细节请点击链接查看。
  • 易用性。有种设计是什么选择都做成选项丢给用户,号称功能都有,但一旦出问题,则是用户“配置错了”。而且这样用户还非常依赖开发团队,没有开发团队的支持基本用不了,开发团队有足够的理由扩充团队。这么做其实非常不负责任,用户面对海量的选项也很难受。brpc对于增加选项非常谨慎,框架能自己做判断的绝不扔给用户,所有用户选项都有最合理的默认值,不设也能用。我们认为这对用户体验来说非常重要。
  • 定位问题的便利性。这点其它开源框架目前做的都不好,正常使用是可以的,但出问题就麻烦了。这个问题在百度内部其实也很严重,brpc之前用户排查问题都要拉RPC同学一起排查,RPC框架对用户是个黑盒,用户根本不知道里面发生了什么。按我们的经验,基本每天都有几个用户在群里问server卡顿,client超时之类的问题,排查问题是常态,人手必然不够。时间长了用户就觉得你这个框架各种问题,人还拽的不行很少回他们消息。brpc的解决办法是给server内加入各种HTTP接口的内置服务,通过这些服务,用户可以很快看到server的延时、错误、连接、跟踪某个RPC、CPU热点、内存分配、锁竞争等信息,用户还可以使用bvar来自定义各类统计信息,并在百度的运维平台NOAH上汇总。这样大部分问题用户可以自助解决。其实我们去看也是看这些,只是会更加专业。内置服务的具体说明可以看这里。
 
Q:作为公司内部的RPC框架,在服务治理方面有什么考虑?

戈君:百度内部RPC使用非常广泛,基本都是RPC调用,一些产品线还会通过local RPC隔离工程框架和策略代码。这么多年下来,服务周边的系统也比较全面了:编译是BCLOUD,发布是Agile,服务注册和发现是BNS,认证是Giano,监控和运维是NOAH。在百度内部,brpc和这些系统做了比较紧密的绑定,用户体验是一站式的。虽然在开源版本中,这些结合大都删掉了,但用户可以根据自己组织中的基础设施来进行定制:交互协议,名字服务,负载均衡算法都可以定制。对于其中一些特别通用的,我们希望用户反馈到开源版本中来以方便所有人。
 
Q:之前百度还开源过sofa-pbrpc,brpc与它的区别是什么?

戈君:sofa-pbrpc也是百度开发的一个比较早期的RPC框架,属于sofa编程框架的一部分,在搜索有应用。brpc相比sofa-pbrpc有如下优点:
  • 对协议的抽象更一般化,并统一了全百度的通信架构。bprc能容纳非常多的协议,基于Protobuf的,基于HTTP的,百度内的nshead/mcpack,开源的Redis/Memcached,甚至RTMP/FLV/HLS直播协议,brpc能逐渐地嵌入现有系统,而不需要彻底重构,但sofa-pbrpc则不具备扩展协议的能力。类似的,sofa-pbrpc也无法定制负载均衡算法,brpc默认提供round-robin、随机、一致性哈希,Locality-aware(局部性感知)四种算法,用户还能定制。
  • 多线程质量更好。多线程编程是非常困难的,看起来简单的RPC遍布多线程陷阱,比如处理超时的代码可能在RPC还没发出去时就运行了;发送函数还没结束,处理回复的回调就被运行了;一个回复还在被处理另一个回复回来了,诸如此类。另外,一个异步RPC的回调里发起一个同步RPC会发生什么,带着锁做同步RPC会发生什么。这些问题我们都不能在sofa-pbrpc中找到满意的答案。
  • 完备的调试和运维支持。解决这个问题的本质还在可扩展性,你如何让用户参与进来定制他们感兴趣的指标,为此我们设计了bvar,让用户能用比原子变量代价还小的方式自由地定制各种指标,用户能在浏览器上看到指标的变化曲线,或在运维平台NOAH看到汇总的监控数据。brpc还加入了大量内置服务方便用户调试程序,查看连接,在线修改gflags,追踪RPC,分析CPU热点,内存分配,锁竞争等一应俱全。
无需讳言,brpc在诞生之初和sofa-pbrpc在百度内部是有竞争关系的,但就像其他地方一样,这种竞争带来了活力。类似的,brpc和其他已经开源的RPC框架也是良性的竞争关系,在比拼谁能真正提高用户效率的过程中共同进步。每个用户都可以去对比代码、文档质量,接口设计,易用程度,扩展能力等,投出自己的一票。
 
Q:谈谈brpc的整体架构?

戈君:技术栈无外乎是从传输层垒到应用层,就略过不讲了,具体可以去看下开源出来的文档。brpc在架构上强调“在不牺牲易用性的前提下增强可扩展性”,比如brpc支持非常多的协议,在百度内部一个brpc server同端口可以支持二十几种协议,这对于服务的平滑迁移就非常好用。

Client端的协议也非常多,用户用brpc和bthread用得很爽,所以希望我们最好能统一所有的客户端,像对Redis和Memcached的客户端支持也是在这个背景下做的,这两个客户端比官方Client好用多了,感兴趣的读者可以去尝试一下。但这么多协议的配置非常简单,填个字符串就行了,比如HTTP就是把ChannelOptions.protocol设为“http”,Redis就是“redis”。Server端甚至不用设,它会自动判断每个client的协议,怎么做到的开源文档里也有。

名字服务、负载均衡也都可以定制。但为了对用户负责,我们也不鼓励“太自由”的定制,比如一点点需求的变化就要搞个新的,这时更需要想清楚本质区别是什么。这个事情我们在百度内的支持群里每天都在做,我们是开放的”乙方”,但我们也是严厉的”乙方”。
 
Q:brpc的性能如何?这么高的性能是怎么做到的?

戈君:性能是我们非常看中的一点,它和用户体验也是紧密联系的。好用但性能不行,或不好用但性能很牛,用户会很难受,我们不希望用户纠结。从另一个角度来看,在推广初期,我们要说服产品线用brpc靠什么?最直观的就是性能提升。而且这儿的性能不能停留在benchmark的图片上,而是能在真实应用中体现出来。开放出来的案例文档中或多或少都包含了性能提升,具体如下:
  • 百度地图API入口
  • 联盟DSP
  • ELF学习框架
  • 云平台代理服务
 
Q:为什么要将brpc开源?接下来在开源项目的迭代方面有什么计划吗?

戈君:因为马上还有不少依赖RPC的百度系统要开源啊。RPC作为最基础的组件,开源不仅仅是为了自身,也是为其它开源项目铺路,比如说我们马上还会开源基于brpc的RAFT库,搭建高可用分布式系统非常方便;以及使用brpc的bigflow,让流式计算变得很顺手。这些年百度对开源的认识也在不断加深,开源看似曝光了百度的核心技术,但带来的生态影响力更重要。从Apollo、PaddlePaddle开始,百度真的开始拥抱开源了。brpc的开源版和内部版很接近,只是去掉了对百度内部独有的一些基础设施的支持,我们在内网写的深入分析RPC技术细节的文档也都一并开源了,后续也会及时推送改动,请大家放心。这是一个活项目,不会拉个开源分支就不管了。
查看更多资讯>>>


 近期热门 - 点击最多
  1. python基于asyncio实现 Redis 的异步操作哈希数据写入 / 读取、发布订阅消息中间件
  2. Node.js 打印vite react+go项目目录树
  3. Angular入门:用Signals状态管理和Bootstrap基础样式实现的用户登录注册实例教程
  4. 用Gitea搭建免费Git服务器自定义Actions配置CI/CD自动化部署和测试流水线
  5. FastAPI+SQLModel+PostgreSQL+React+Vite全栈项目文件结构说明环境搭建与初始化指南
  6. React结合vite使用vue3,在纯typescript的react hooks中使用vue
  7. valtio基于Proxy代理比redux\zustand更简洁的react状态管理库
  8. React Native为http网络请求添加timeout超时异常处理: 用XMLHttpRequest替换fetch发送的区别
  9. React Native使用fetch发送http登陆验证请求失败:无法读取set-cookie并显示network request failed
  10. 克服Redux的缺点在React/Native中使用消息队列,pubsub-js更加简洁的组件间通信和状态传递方法

  全端社区 - 最新回复
  1. python基于asyncio实现 Redis 的异步操作哈希数据写入 / 读取、发布订阅消息中间件
  2. Angular入门:用Signals状态管理和Bootstrap基础样式实现的用户登录注册实例教程
  3. 用Gitea搭建免费Git服务器自定义Actions配置CI/CD自动化部署和测试流水线
  4. FastAPI+SQLModel+PostgreSQL+React+Vite全栈项目文件结构说明环境搭建与初始化指南
  5. Node.js 打印vite react+go项目目录树
  6. valtio基于Proxy代理比redux\zustand更简洁的react状态管理库
  7. Windows与Mac通过git ssh和rsync实现文件共享互传
  8. Windows与Mac通过git ssh和scp实现文件共享互传
  9. React结合vite使用vue3,在纯typescript的react hooks中使用vue
  10. 使用PubSub-JS时ReactNative在后台运行一段时间唤醒后,组件无法scribe到publish的事件,typescript实现一个事件订阅发布组件

  开源的 OurJS
OurJS开源博客已经迁移到 OnceOA 平台。

  关注我们
扫一扫即可关注我们:
OnceJS

OnceOA