关于封装Dll为Web Service技术方案的讨论

关于web架构技术方案的讨论整理 Sonictl 2014年1月25日10:05:52   本着“三人行必有我师”的学习态度,我在近期跟x老师做了大量沟通,结合我们单位对于“xxx”项目的推进情况,整理一下有关技术方案的讨论结果。  讨论背景:某单位希望把他们在PC上的某算法包DLL封装成WebService服务。 X老师主张用c++ 来封装web service, 原因如下:   1、测试 DLL 性能时将外围性能影响降到最低,C++封的包可以做到这一点。而使用 Ruby/Python/.net 封包以后,Ruby/Python/.net调用DLL的性能会更大程度地影响到整体web service的性能,测试结果会包含Ruby/Python/.net调用DLL的性能和DLL本身的性能,两方面。   2、C++ 轻量、灵活、可扩展、与 nginx 配合良好。封装出来的接口,完全是单纯的计算任务,与前端的商业业务逻辑毫不相干,架构设计非常容易,几乎零技术成本的就能组装出 1台 WEB 服务器 + 1台数据库服务器 + N 台算法服务器的架构来。   3、Ruby/Python/.net 调用DLL,确实搭建很快,很容易,可以说没有神马技术含量。ruby或是python,当然是web开发的首选,但我们“xxx”项目是要把一个本地的算法程序转换为web服务。虽然ruby和python都可以调用DLL,但效率都很低。在windows平台下ruby是否靠谱?老师测了一下,单纯构建一个字符串json返回给客户端,他的机器上,ruby方案是500多请求每秒,而c++ rest是2500多每秒,虽然都不是很高,但这么看来,ruby的差距还是挺大的。不过,关于.net,即所说的ashx(不用ashx也可以),调用 DLL性能上因为是微软自家人,比起其他外来户,的确有它的性能优势,如果我们只是想应付千人左右的同时在线,完全可以就按此技术线路走下去,走不动了再请架构师。   4、.net 本身可不可以做负载均衡?当然可以,比如: http://www.cnblogs.com/luminji/archive/2012/05/16/2184280.html,由于x老师更习惯使用Rails,他对.net便不是那么热衷。但他提到,文中的测试数据,629.93请求/秒,连1000都没有上,有点低,怀疑IIS性能是否真的有这么差,可能有其他原因。因为根据x老师经验, 在linux 的 nginx 测试数据,一般都几千上万的。当然,x老师提到完全可以在IIS 前面再装个nginx,但是他在实践中从来没有见到有人这么搭配过。   5、这个WebService封包的办法很多,进入x老师视线的有 qt webservice(http://qt-project.org/)(x老师最开始准备采用的方案)、WCF(比较合适)和 ICE(http://www.zeroc.com/ice.html),其中 ICE 最牛,号称电信级解决方案。qt 的性价比最高,最后为什么就锁定了c++ webservice了呢?除了上述第2点中说到的轻量、灵活、可扩展、与 nginx 配合良好、服务器架构技术成本低,最主要的原因是,它和 QT 一样都是跨平台的解决方案。c#为什么不推荐使用,因为它锁定windows平台。加之前端若加nginx,除了可做反向代理外,最重要的是它几乎是零成本的负载均衡方案,而nginx在windows下不稳定,一般的生产系统很少这么配。   6、关于最后锁定C++,还想补充一点:去年,微软开源了代码为 Casablanca的 C++REST SDK,目的主要是为了让C++编程时更加方便的消费 RESTful 服务。但最近它新增了一项功能:New experimental features such asHTTP Listener library,正是这项功能的出现,我们可以利用 Casablanca,搭建起一个原生代码与云计算服务之间的双向桥梁,轻轻松松的把那些用C、C++、Delphi 甚至是 VB 写的单机程序转变成 Web 服务。   7、关于使用和学习Ruby,x老师给了一个总结:“总结了一下这几天用的技术,http://ruby-china.org/topics/16982 ,你可以发给你们开发的同学看看。”    

READ MORE

什么是 web 开发

什么是 web 开发 这几天因为工作需要,了解了一下Web development 的技术路线,来源自 en.wikipedia.org/wiki/Web_development 本着互联网开放分享的态度,我是一边翻译一边学习。 ————— ——————————————- “web 开发”是在因特网www或者在局域网a private network上建立站点的各种方法的宽泛总称。 web 开发可以从 开发一个最简单的纯文本的静态单页面 到 很复杂的基于web的internet 应用、电子商 务、和社交网络服务。一个更综合性更完善性的归纳可以把web 开发分为为: web 设计, web 内容开发, 客户端联络, 客户端/服务器端 脚本开发, web 服务, 网络安全配置, 和 电子商务开发(比如支付服务)。 (相关词条还有更深层次的解释,有空我可以后续学习并翻译出来) 在web 专业领域,“web 开发”一般是指 在网站建设中,那些无关页面设计的工作:写 Markup 标记语 言和写代码。 ————— 【以上是有关 定义 咯】 ————— 对于大的组织或公司,web 开发团队可以由几百个开发者(web开发人员)组成。小点的组织只需要单一 的长期工或者合同制的web master, 或者兼职。比如 图形设计, 信息系统 工程人员。web开发会是几个部门之 间的协同工作,而不是某个特定的designated部门的某个业务区域(domain)。 ===== 目 录 ===== 1.web 开发作为一个产业industry 2.web 开发的一些典型的领域 2.1 客户端开发 2.2 服务器端开发 2.3 客户端+服务器端 2.4 数据库技术 3.实际的web 开发工作 3.1 基础 3.2 高级 4.安全性考虑

READ MORE

Android手机图片路径

H:\dcim\100MEDIA H:\Tencent\MobileQQ\photo H:\Tencent\MobileQQ\photo H:\Tencent\MobileQQ\thumb H:\Tencent\MobileQQ\thumb2 H:\dcim\.thumbnails H:\Android\data\com.dropbox.android\cache\thumbs\Camera Uploads\

READ MORE

下载Chrome独立版(alternate/offline Installer)的地方

因为Great fire wall,Chrome无法更新,下载独立版(alternate/offline Installer)的地方 很多朋友可以用proxy firefox访问google,却无法让Chrome online installer连网更新。所以需要这个alternate installer: 独立版英文叫做: Alternate (offline) Google Chrome installer (Windows) 参考文章以及下载官方地址: https://support.google.com/installer/answer/126299?hl=en

READ MORE

有关Firefox/Chrome的问题汇总

安装的附加组件因未经验证而被 Firefox 禁用,我该怎么办 如果您已安装的附加组件因未经验证而被禁用了,建议您联系附加组件开发者或提供给您附加组件的人,看看他们能不能提供新版经过验证的附加组件。您也可以要求他们将附加组件提交验证。 强制禁用这个首选项(高级用户): 你可以在 Firefox 配置编辑页面 (about:config 页面)把 xpinstall.signatures.required 首选项设为 false 来强制禁用附加组件验证的功能。我们不会为手动在配置编辑页面做出的任何修改提供援助,因此请自担风险。 更新 Chrome 后,新标签下方的最近访问菜单消失-【解决】 How to find back the disappeared "recently closed" bar under new tab in Chrome which had been upgrated. Reopen recently closed tabs in Chrome If you have just closed a tab by mistake or need to re-visit a recently closed website do not panic - all is not lost. Have you ever wished you hadn't just closed that Google Chrome browser tab. Get it back by right-clicking in the tab bar and selecting Ctrl+Shift+T.

READ MORE

Linux常用各类设置、常用配置、日常使用、常用、使用技巧,集锦

========== 参考格式 (新增记录时,复制粘贴在下)============= 【日期】: 《标题》 参考链接ref1: 参考链接ref2: 正文: === some useful set timeZone, 设置时区,定时输出bash script #!/bin/bash while true do now="$(date)" printf "Current date and time %s\n" "$now" sleep 2 done # ============================ timedatectl list-timezones | grep Shanghai sudo timedatectl set-timezone Asia/Shanghai # ========= 安装微力同步 ========= installed verysync at IP:8886 by: #(如果需要指定索引存放位置请在最后面添加-d 路径 如 -d /data/verysync) curl http://www.verysync.com/shell/verysync-linux-installer/go-installer.sh > verysync-installer.sh chmod +x verysync-installer.sh sudo ./verysync-installer.sh # =================== === 【2021-07-09】Linux之挂载新的硬盘:分区,格式化 参考链接ref1: Link of HUAWEI Cloud 目录 添加硬盘 分区 格式化 挂载 总结 分区 硬盘添加完成后重启系统,输入用户名密码后进入linux操作界面。接着我们需要做的是为新磁盘分区。 1.

READ MORE

好用的 FTP 软件之 FileZilla 技巧教程

FTP 软件之 FileZilla教程 使用教程参考:http://163.26.161.1/~yilinteacher/wwwict/flash/FileZilla.swf (1)如何设置传输完成后关机 在传输任务处单击鼠标右键,选Action,shutdown即可。

READ MORE

使用html和CSS进行网页网站设计 -- 简明步骤

网页制作流程: 1. 心中有规划,网站的骨架结构,页面布局layout. 2. 创建一个用于创建模板dwt的html页: main.html 3. 制作main.html: (1) 在html文件中依次建立 <div id = "outter"> … </div> <div id = "wraper"> … </div> <div id = "top"> … </div> <div id = "banner"> … </div> <div id = "navigator"> … </div> <div id = "content"> … </div> <div id = "footer"> … </div> 等等分区。 (2) 往分区中填入文字图片等内容。 (3) 新建一个css文件,在Dreamweaver下,CSS Designer(Shift+F11) -> "+" -> 新建并附加一个css样式表文件: ../style/style.css (4) 编辑style.css,通过点击左上角切换html代码和css代码。 (5) 通过margin, width, float, padding, 等等css语句,进行layout border, background-color, font-family, font-size, 或者使用class的概念,进行细分。 对于h1 html body p标签,亦可使用css, 和class

READ MORE

C语言键盘按键无阻塞侦测:kbhit()

http://www.360doc.com/content/12/0414/09/1317564_203474440.shtml kbhit in c kbhit in c: kbhit function is used to determine if a key has been pressed or not. To use kbhit function in your program you should include the header file "conio.h". If a key has been pressed then it returns a non zero value otherwise returns zero. Declaration : int kbhit(); C programming code for kbhit #include <stdio.h> #include <conio.h>   main() { while (!kbhit()) printf("You haven't pressed a key.\n");   return 0; } As long as in the above program user doesn't presses a key kbhit() return zero and (!

READ MORE

Static / Const 的概念

C/C++/Java Static / Const 的概念 这里以C为准,其他语言类似。 Static变量是指分配不变(只可分配一次,以后再分配就无效了。)的变量 -- 它的存活寿命或伸展域可以贯穿程序运行的所有过程。这个概念与“ephemeral-短命的”,分配即变的,变量恰恰相反。常常被人们称作的局部变量就是分配即变的。分配即变的变量的存储空间的分配或者回收都是在Stack上完成。相反,分配不变变量的存储空间实在heap memory上动态分配的。 当一个程序被加载到内存,Static变量被存放在程序的地址空间的数据区(如果已初始化了),或者BBS区(BBS Segment)(如果没有被初始化)。 并且在加载之前就被存放在对应的对象文件的区域。 Static 关键字在 C 语言和其他相关语言中都是指这个静态分配的意思或类似意思。 --- 作用域 --- Scope[edit] See also: Variable (computer science)#Scope and extent In terms of scope and extent, static variables have extent the entire run of the program, but may have more limited scope. A basic distinction is between a static global variable, which is in scope throughout the program, and a static local variable, which is only in scope within a function (or other local scope).

READ MORE