未发布 Oracle MySQL 5.5和5.6正受到Riddle漏洞影响,请立即更新到5.7!丨附下载 流行的数据库管理系统(DBMS)Oracle MySQL 中发现了被称为“The Riddle”的编码漏洞,该漏洞允许攻击者利用MiTM(man-in-the-middle,中间人)来窃取用户的用户名和密码等登录凭证。用户请立即更新到5.7版本。
中间人攻击(MiTM)
MiTM 攻击(Man-in-the-MiddleAttack)是一种“间接”的入侵攻击,这种攻击模式是通过各种技术手段将受入侵者控制的一台计算机虚拟放置在网络连接中的两台通信计算机之间,这台计算机就称为“中间人”。例如SMB会话劫持、DNS欺骗等攻击都是典型的MITM攻击。
Riddle漏洞
Riddle漏洞是Oracle MySQL 5.5和5.6客户端数据库中发现的关键安全漏洞。该漏洞允许攻击者使用‘中间人攻击’来破坏MySQL客户端和服务器之间的SSL配置连接。这个漏洞是一个非常关键的安全漏洞,因为它影响到MySQL(一个非常流行的SQL数据库,SSL连接由其定义安全。)
该漏洞编号为“CVE-2017-3305”,可以潜在地将用户登录凭证暴露给攻击者,当MySQL客户端5.5和5.6将这些用户凭证信息发送到服务器时,攻击者就能够顺利捕获它们。
针对5.5.49和5.6.30版本发布的安全更新无法完全解决这一安全漏洞。5.7及更高版本以及MariaDB系统不受该安全问题的影响。

根据安全研究人员 Pali Rohár 所言,他们曾经尝试利用影响MySQL数据库的BACKRONYM漏洞的修补方式来修复Riddle漏洞,但是结果失败了。Backronym漏洞也同Riddle漏洞一样,允许攻击者运行中间人攻击来窃取用户登录凭证,即使流量已经被加密也无法阻止。
MySQL 5.5.49以及5.6.30 稳定版的安全更新包括在验证过程完成后添加安全参数的验证。因为验证完成后,攻击者可以使用中间人攻击与 SSL 降级攻击来窃取用户的登录数据,以便立即进行身份验证并登录 MySQL 服务器,可笑的部分是,MySQL 客户端不会在MySQL服务器拒绝验证用户时报告任何与 SSL 问题相关的错误,而是报告服务器发送的未加密的错误信息。此外,当中间人攻击处于活跃状态时,错误信息可以由攻击者控制。
更新建议
安全专家建议用户尽快将客户端软件更新到MySQL 5.7 或 MariaDB,因为这些应用程序的安全更新正在正常运行,未受该安全漏洞影响。需要注意的是,这个漏洞虽然早在今年2月份就已经发现了,但是目前仍然在影响Oracle MySql软件。
如果你不是Oracle 用户,那么你对他们报告安全漏洞是无用的(即使确实是与安全相关的漏洞)。他们可以完全无视这些安全报告,甚至希望任何人都不要知道这些报告和漏洞的存在,所以至此他们都没有对漏洞进行修复。所以,立即向用户公开披露这些安全漏洞看来是最有效的解决方案,因为这样可以让用户知道一旦受影响应该做什么,有效的保护用户数据安全。
试用、下载、了解更多产品信息请点击"咨询在线客服"
未发布 2017年8个最流行的Web编程趋势 互联网一直在不断的发展,这意味着开发人员必须及时了解当前的所有变化。人们在新闻、社交、购物到银行等各大方面都与互联网有着千丝万缕的联系。因此,为了满足全球数百万网络用户的需求,
Web开发需求正在上升。
Web编程趋势是在W开发的过程中不断变化,不断创新,并逐步淘汰已经过时的想法。以下是2017年你可能会看到的一些当前的Web编程趋势:
视频曾一度统治互联网,它能确保那些在线的人参与互动,并吸引受众停留更长的时间。随着网页上视频的观看次数显着增加,从长远来看,也可以带来更多的转化。

这是一个越来越多开发人员喜欢使用的集合。通过它,你可以创建单页应用程序,而不需要依赖于java中的框架。此外,该集合可以确保使用它的人做到最好。
这一直是一个趋势。开发人员正在使用Motion UI创建具有生命力的网站,并且还会对登录到其中的每个用户做出反应。这是出现在你屏幕上的特殊效果。
材料设计基本上是Google的一种哲学,它定义了应用程序在无线设备上的外观和性能。使用它可以更改所有类型,包括网站的风格和动画在布局中显示的方式。在视觉上,它正在成为开发人员的关键工具。
当你正在寻找创建在服务器上运行的网站时,你应该考虑这一点。这是一个趋势,因为它是创建网站的绝佳方式。创建的文件大大简化了,因为它们存储在除数据库之外的文件中。其拥有流量、安全性、速度和易于操作等优点。加载网站更容易、更安全。
浏览多个标签、以及链接到更多页面的网页已经是过去式了。现在用户正在选择单页面的网站、博客等类型。他们使用更方便,特别是在人们在旅途中的移动设备上。
Angular 2带来了很多转变,例如Google的JavaScript框架,这是完全重新设计的。它的好处是它利用了JavaScript ES6中的功能。这意味着未来的Web开发将变得更容易和有效。
这是未来Web开发中一个重要的趋势,特别是在游戏行业。它开始于Vive和Oculus Rift的到来,为游戏世界带来了巨大的可能性。像Google和Mozilla这样的全球性公司带来的API将有助于虚拟现实的转型。
Web开发人员必须了解Web编程的最新趋势,以便设计符合这些趋势的网站以及增加用户体验的网站。随着互联网的快速发展,这些趋势也会随之而变。因此,随时了解行业趋势是非常有用的。
未发布 2D/3D文档查看器ABViewer发布v12,大大提高PDF转DWG的速度丨附下载 ABViewer是一款高质量的2D/3D文档查看器,可提供专业的浏览、编辑和转换功能,支持30多种光栅和矢量图形格式,其中包括AutoCAD DWG, DXF, DWF, Hewlett-Packard HPGL, PLT, HGL, CGM, SVG, IGES/IGS, STEP/STP, STL, 3DS, TIFF, BMP, JPG, GIF等。 ABViewer 12支持AutoCAD®DWG 2018、PDF转DWG速度更快、DWG/DXF转G-code。
ABViewer始终与时俱进,CAD应用程序的新版本ABViewer 12主要用于DWG/DXF和其他2D和3D CAD格式,以及三个主要亮点。
导入AutoCAD®DWG 2018
无论你是在CAD行业工作还是偶尔接收CAD图纸,ABViewer 12始终能够打开所有版本的DWG文件。支持导入最新版本的绘图文件格式 - AutoCAD®DWG 2018。
提高PDF转DWG的速度
ABViewer 12中PDF到DWG转换速度大大加快。以前,转换大文件需要很多时间,现在你无需浪费这些时间了。一些文件的转换就在眨眼之间!
DWG/DXF转换为G-code
许多使用数控机床的人需要从CAD文件中生成G-code。新版本的ABViewer可以实现这个目标。
你可以使用ABViewer创建铣削和切割数控机床的G代码。只需加载你的DWG或DXF文件,调整设置,ABViewer将从你的图纸中生成G-code并将其保存为NC文件格式。
未发布 Java新版本的开发已正式进入轨道,版本号18.3 Java 9在9月21日正式发布,同时Oracle宣布将Java新版本的发布周期调整为每半年一次。目前,Java新版本的开发也已正式进入轨道。就已公开的消息来看,下一个版本的Java预计会在2018年3月发布,版本号将会是18.3,已经规划加入的特性包括JEP 286和296。
根据reddit站点上的讨论,首先更新的是JEP 296,Valhalla预计很快也会加入进来。OpenJDK的主页面则显示,已确定要在18.3版本实现的是JEP 286和296。
JEP 296主要是将JDK仓库群(JDK Repository Forest)合并为一个仓库,旨在降低管理大量仓库群的成本。根据InfoQ之前的报道,该仓库群的合并已经完成。这些软件仓库是在OpenJDK发展史上历次分裂生成的,在OpenJDK 9及以前的版本中将会继续存在。在这次合并操作之前,OpenJDK曾分裂为多个不同的Mercurial软件仓库群,这导致了许多问题,例如不能以原子方式对多个软件仓库应用漏洞修复(Bug Fixes)。在OpenJDK合并完成后,只会有一个软件仓库,并复制在三个开发线上。为了简化仓库的管理,JDK中还创建了用于在合并和未合并版本间移动更改的工具。
JEP 286提议在Java中引入局部变量的类型推断,该JEP在2016年提出,InfoQ曾经报道过该JEP的概况和相关的开发者调查结果。该JEP旨在减少编写Java代码相关的仪式性的内容,提升开发人员的体验,同时还要保证Java语言的静态性。它会减少开发人员在声明局部变量时,没有必要的变量类型声明。如果该JEP实现的话,在声明局部变量的时候,就可以采用类似如下的方式:
var list = new ArrayList(); // infers ArrayList
var stream = list.stream(); // infers Stream
这种语句只能用于带有初始化器(initializer)的局部变量、增强的for-loop中的索引以及传统for-loop中声明的局部变量。它不能用于方法声明、构造函数声明、方法返回值、字段、catch语句以及其他类型的变量声明中。
关于局部变量的类型推断,不管是JVM体系中的语言还是其他语言都提供了一定形式的支持,比如C++(auto)、C#(var)、Scala(var/val)以及Go(通过:=进行声明)。至于该使用var作为关键字,还是使用let或类似于C/C++中的auto作为关键字,之前曾经有过一个面向开发者的调查。大约84%的回答表明定义可变内容的变量用关键字var是恰当的,只有百分之几的回答者建议使用auto更合适。根据Java语言架构师Brian Goetz介绍,该功能应该使用关键词var。
关于该特性的用法,在reddit上有一些讨论。有人表示,即便在支持“auto”语法的语言中,该特性使用的也比较少,因为有些人希望一眼就能看出变量的类型是什么。也有人认为,var有它的适用空间,在小的代码块中,直接用它实例化对象是可以的。如果是作为方法返回值的话,还是希望明确声明类型,Java的类型推断并不支持方法返回值,这一点倒不必担心。如果函数或代码块比较长的话,就不建议使用var了并要考虑适时进行代码的重写。时间和经验将会让我们更加明确应该在何时使用新功能,就像Optional刚出现时,也是耗费了一些时间才明确其推荐适用场景。
Valhalla项目中包含了一些有趣的JEP,包括值类型(Value Type)、针对原始类型实现泛型功能、增强的volatile等,外界很期待这些内容最终也能添加到新版本中。
2017慧都十四周年狂欢搞事情!砸金蛋100%抽现金红包、满额豪送iPhone X、iPhone 8、DevExpress汉化免费送、团队升级培训套包劲省10万元......更多惊喜等您来探索!

未发布 Edraw Max(亿图图示)新技能:在软件上进行反激活 Edraw Max(亿图图示)8.7以上的版本,新增了“反激活”功能,也就意味这用户以后可以自主进行反激活。Edraw Max(亿图图示)一个产品秘钥支持两台电脑同时使用,如果超过两台电脑,则需要清除其中一台电脑的绑定,也就是反激活操作。又或者因为某些原因导致电脑需要重装系统,那么,你也需要进行反激活。否则,就会出现产品秘钥失效的情况。
本文将详细介绍Edraw Max(亿图图示)8.7以上版本在软件上应该如何进行反激活操作!目前Edraw Max(亿图图示)在线订购享75折优惠活动正在进行中,欢迎您下载、购买进行运用!
首先,请确定软件是8.7及其以上版本,软件版本查看如下图所示:
如果已经是8.7以上版本的,就可以通过软件一键“反激活”按钮,来进行反激活操作了。
第一步:点击软件上方菜单栏“帮助”中的“反激活”,然后系统会弹出一个提示框,确认信息后点击“反激活”。
第二步:当提示反激活成功后,软件会自动关闭。
第三步:再次打开软件,软件就显示为试用版本的了。
接下来你就可以任意的换电脑,重装系统了。当这一切都准备完毕,软件也重新下载、安装好了,最后只需要按照一般的激活方法,使用原来的产品密钥激活软件就可以了!
总而言之,如果你要换电脑了,请提前进行反激活;如果你的电脑需要重装系统,也请提前反激活。
温馨提示:首次反激活即刻生效,以后再进行反激活则需30天的冷却期。
未发布 Edraw Office Viewer component教程(二):将Excel嵌入VB 6并使之自动化
使用Edraw office viewer component,vb开发人员可以轻松地将一个现有的Excel电子表格嵌入到表单中,然后进行自动化。在加载表单时,开发人员可以使用Open方法从硬盘驱动器或服务器中加载* .xls、* .xlsx、* .xslm或* .cvs文件,并在窗口的某个区域中打开。Excel文件可以是只读、完全编辑或禁止保存等状态。开发人员还可以使用excel组件轻松实现excel自动化。
本文将演示如何逐步将Excel嵌入到VB中。如果你没有officeviewer.ocx文件,请先安装。
Office viewer component - 支持Word、Excel、PowerPoint、Visio和Project的vb6、vb.net项目
在VB 6中嵌入Excel组件
启动Visual Basic并创建一个新的标准项目。默认情况下创建Form1。
在“工具箱”面板中,右键单击空白区域。然后单击Component...
在弹出的对话框中,查看Edraw Office Viewer Component。
单击确定按钮。
Office Viewer Component便已添加到“工具栏”窗口中。
切换到VB 6窗口,然后添加组件。
该组件包括许多自定义Excel窗口的方法、事件和属性。
开发人员可以使用以下代码在Form_Load事件中打开一个excel文件。
Private Sub Form_Load() EDOffice1.OpenFileDialog'EDOffice1.OpenWord “d:\ test.xlsx” 'EDOffice1.Open“d:\ test.xls”,“Excel.Application” End Sub |
为了保护Excel工作表不被最终用户修改,开发人员需要在DocumentOpened事件中添加以下代码。
Private Sub EDOffice_DocumentOpened() EDOffice1.ProtectDoc 1'XlProtectTypeNormal End Sub |
一些包含excel自动化的方法可用于创建或修改Excel数据。
bool ExcelAddWorkSheet(long Index); bool ExcelDeleteWorkSheet(long Index); bool ExcelActivateWorkSheet(long Index); 长ExcelGetWorkSheetCount(); bool ExcelSetCellValue(long Column,long Row,BSTR Value); BSTR ExcelGetCellValue(长列,长行); bool ExcelSetRowHeight(long Row,double Height); bool ExcelSetColumnWidth(long Column,double Width); afx_msg bool ExcelDeleteRow(long Row); bool ExcelDeleteColumn(long Column); bool ExcelInsertRow(long Row); bool ExcelInsertColumn(long Column); bool ExcelInsertPageBreakInRow(long Row); bool ExcelInsertPageBreakInColumn(long Column); bool ExcelCopyToClipboard(); bool ExcelPasteStringToWorksheet(BSTR bstText); |
使用Visual Basic自动化操作Excel
单击项目,然后单击引用。将显示“引用”对话框。向下滚动列表,找到Microsoft Excel object库(Microsoft Excel xx.x Object库),然后选择引用Excel。如果列表中没有正确的Excel Object库,请确认你是否安装了合适的Excel版本。
单击“确定”关闭“引用”对话框。
将CommandButton添加到Form1。
在Form1的代码窗口中,插入以下代码:
Private Sub Command1_Click() Dim oXL As Excel.Application Set oXL = EDOffice1.GetApplication() Dim oWB As Excel.Workbook Set oWB = EDOffice1.ActiveDocument() Dim oSheet As Excel.Worksheet Dim oRng As Excel.Range Set oSheet = oWB.ActiveSheet oSheet.Cells(1, 1).Value = "First Name" oSheet.Cells(1, 2).Value = "Last Name" oSheet.Cells(1, 3).Value = "Full Name" oSheet.Cells(1, 4).Value = "Salary" ' Format A1:D1 as bold, vertical alignment = center. With oSheet.Range("A1", "D1") .Font.Bold = True .VerticalAlignment = xlVAlignCenter End With ' Create an array to set multiple values at once. Dim saNames(5, 2) As String saNames(0, 0) = "John" saNames(0, 1) = "Smith" saNames(1, 0) = "Tom" saNames(1, 1) = "Brown" saNames(2, 0) = "Sue" saNames(2, 1) = "Thomas" saNames(3, 0) = "Jane" saNames(3, 1) = "Jones" saNames(4, 0) = "Adam" saNames(4, 1) = "Johnson" ' Fill A2:B6 with an array of values (First and Last Names). oSheet.Range("A2", "B6").Value = saNames ' Fill C2:C6 with a relative formula (=A2 & " " & B2). Set oRng = oSheet.Range("C2", "C6") oRng.Formula = "=A2 & "" "" & B2" ' Fill D2:D6 with a formula(=RAND()*100000) and apply format. Set oRng = oSheet.Range("D2", "D6") oRng.Formula = "=RAND()*100000" oRng.NumberFormat = "$0.00" ' AutoFit columns A:D. Set oRng = oSheet.Range("A1", "D1") oRng.EntireColumn.AutoFit oXL.UserControl = True End Sub |
按F5运行项目。Excel将自动填充excel单元格。
自动化Excel时要注意的一点是Excel Macro Recorder。它仍然在Word 2007中,但隐藏在开发者功能区栏。
以上就是本次教程的全部内容,接下来会有更多相关教程,敬请关注!您也可以在评论者留下你的经验和建议。
未发布 【百厂约惠】盘点2017年5款最好用的图形图像/CAD工具 图像已经成为网络不可或缺的一部分,相比文字来说图像更直观。那么各种图形图像的处理软件、控件就必不可少了。
今天为大家推荐慧都2017年5款最受欢迎的图形图像/CAD工具,附带各个软件、控件的基本介绍以及最新版本的下载地址,有兴趣的朋友可以免费下载进行试用。在使用过程中出现了任何问题,请联系我们的
在线客服。
Dynamic Web TWAIN是一个专为Web应用程序设计的TWAIN扫描识别控件。你只需在TWAIN接口写几行代码,就可以用兼容TWAIN的扫描仪扫描文档或从数码相机/采集卡中获取图像。然后用户可以编辑图像并将图像保存为多种格式,用户可保存图像到远程数据库或者SharePoint。这个TWAIN控件还支持上传和处理本地图像。
VectorDraw Developer Framework(VDF)是一个用于应用程序可视化的图形引擎库。有了VDF提供的功能,您可以轻松地创建、编辑、管理、输出、输入和打印2D和3D图形文件。该库还支持许多矢量和栅格输入和输出格式,包括本地PDF和SVG导出。
CAD .NET是一款在CAD领域被广泛应用的控件,可以快速准确的阅读DWG和DXF文件,并且通过Windows GDI+方法绘制件,支持多种文件格式,包括DWG、DXF、Gerber、光栅图像等,并支持部分编辑功能。
【CAD .NET最新版下载】
ImageGear for .NET是一款图形图像处理控件,具有扫描,压缩,浏览、添加注释,打印,图像编辑,OCR以及PDF和矢量图像支持,使开发人员可以快速地开发出图像处理程序,可用于.NET Framework2.0、3.0、3.5、4.0,ASP.NET,WPF,SilverLight,DirectX 10和Direct3D 10。支持超过100种图片格式,包含:TIFF, JPEG, CAD, Vector, 3D PDF, PDF/A, PS等。
【ImageGear for .NET最新版下载】
使用LEADTOOLS Document Imaging可帮您开发出功能强大的文档图像应用程序。其主要功能包括综合图像注释,专业的黑白图像显示(例如灰度级和偏黑),以及专业的黑白图像处理。其它功能包括对黑白图像的性能和内存进行优化,文档图像清理(包括倒置文本,去边界,去打孔机和去线)以及使用LEADTOOLS Fast TWAIN和WIA进行扫描。
【LEADTOOLS v19总套包免费下载】
郑重承诺:慧都所售产品均为厂商授权的正版产品,请完全放心!
*本活动最终解释权归慧都科技所有
咨询热线: 400-700-1020(免费) 023-66090381

未发布 百度正式开源其RPC框架brpc 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技术细节的文档也都一并开源了,后续也会及时推送改动,请大家放心。这是一个活项目,不会拉个开源分支就不管了。
查看更多资讯>>>
未发布 手机office办公——微软推出安卓手机端Office Mobile应用 微软于4月19日在中国北京首次发布全新的安卓手机端Office Mobile应用。微软此次将 Word、Excel、PowerPoint三者完美合一,为中国的消费者带来完整的移动办公体验。
微软大中华区副总裁兼市场营销及运营总经理康容表示:“微软一直倾听用户的声音,最大化满足 Office 用户的需求。我们十分欣喜地宣布,此次微软中国将携手行业领先的合作伙伴——华为,小米,腾讯和百度在中国联合首发全新安卓手机端 Office Mobile 应用,为移动办公带来更便捷的创新体验。”
全新安卓手机端 Office Mobile 应用以更小的存储空间,为用户带来包括 Word、Excel、PowerPoint 的一站式完整办公体验。同时,它还具有 Office 熟悉的外观和品质,以及专为中国用户设计的本地化创新功能,进一步为用户带来更多便利。
更小的存储空间,完整的办公体验
全新安卓手机端 Office Mobile 应用将以“三合一”模式全面集成 Word、 Excel、PowerPoint 三个独立应用中所有功能,用户可随时随时地访问、查看和编辑 Word、Excel 和 PowerPoint 文档。这款全新安卓手机端 Office Mobile 应用体积更轻盈,不仅减少了应用程序对手机内存的占用,而且简化了用户在不同办公软件之间的切换操作。以更小的存储空间,为用户带来完整的办公体验。

(全新安卓手机端 Office Mobile 应用将 Word、Excel、PowerPoint 三者完美合一)
熟悉的跨设备办公体验,多种格式完美兼容
全新安卓手机端 Office Mobile 应用为用户带来熟悉的跨设备办公体验。当用户使用不同设备对文档进行浏览、快速编辑或添加注释时,所有文档的格式和内容都会与原始文档保持一致。Word 界面整洁美观,文字、图片、页眉、页脚和图表都保持原有格式;无论是幻灯片中的动画、SmartArt 图形和形状,还是 Excel 中的图表和数据,都能够高保真呈现,完美兼容。此外,用户还可以在全新安卓手机端 Office Mobile 应用中浏览 PDF 格式文件,将文档转存为 PDF 格式并进行分享。

(支持图表、动画、SmartArt 图形和形状等功能)
本地化创新功能,文件轻松共享
微软Office一直重视中国用户的声音,通过本地化功能创新,为中国用户带来更好的移动办公体验。全新安卓手机端 Office Mobile 应用支持多种分享形式。除了以链接形式邀请他人编辑或查看文档,还可作为附件一键共享到邮件以及微信、QQ 等社交软件,更好地迎合中国用户的使用习惯。

(融合本地化创新功能,支持文件分享到微信、QQ 等社交软件)
从今天开始,中国安卓手机用户就可以通过华为应用市场、小米应用商店、腾讯应用宝和百度手机助手下载并体验全新安卓手机端Office Mobile应用了。同时,也可以通过微软官网下载安装全新安卓端 Office Mobile 应用。
转自(Microsoft)
