关于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 ,你可以发给你们开发的同学看看。”

关于封装Dll为Web Service技术方案的讨论的更多相关文章

  1. .Net调用Java端带有WS-Security支持的Web Service各方案实战【转】

    原文:http://www.xuebuyuan.com/641669.html 到现在为止,我们AEP平台已经发布很长一段时间了,也有很多ISV接入并上线了,就语言而言,目前主要有三类:Java..N ...

  2. 【转】基于CXF Java 搭建Web Service (Restful Web Service与基于SOAP的Web Service混合方案)

    转载:http://www.cnblogs.com/windwithlife/archive/2013/03/03/2942157.html 一,选择一个合适的,Web开发环境: 我选择的是Eclip ...

  3. Web Service性能测试方案

    目录: 1.web Service简介 2.SoapUI介绍 3.使用SoapUI进行web service性能测试 4.使用LR进行web service性能测试 5.使用JMeter进行web s ...

  4. Web Service 附件技术的发展及演变

    Web Service 通常将业务数据封装在 SOAP 主体或者 SOAP 消息附件中进行传输,这些附件往往采用 Base64 编码二进制方式进行封装,这将大大增加待传输的数据量,消耗比较长的编码时间 ...

  5. Web Service概念梳理

    计算机技术难理解的很多,Web Service 对我来说就是一个很难理解的概念:为了弄清它到底是什么,我花费了两周的时间,总算有了一些收获,参考了不少网上的资料,但有些概念说法不一.我以w3c和 一些 ...

  6. 关于WEB Service&WCF&WebApi实现身份验证之WEB Service篇

    在这个WEB API横行的时代,讲WEB Service技术却实显得有些过时了,过时的技术并不代表无用武之地,有些地方也还是可以继续用他的,我之所以会讲解WEB Service,源于我最近面试时被问到 ...

  7. 使用Web Service进行网络编程-----Web Service简介

    Android应用通常都是运行在手机平台上,手机系统的硬件资源是有限的,不管是存储能力还是计算能力都是有限的,在Android系统上开发.运行一些单用户.小型应用是可能的,但对于需要进行大量的数据处理 ...

  8. Web Service 初步了解

    Web Service见名之意就是网络上的一些服务,解决的问题就是如何使用这些服务,因为软件的开发有各种各样的语言,利用Java,C#,VB.NET,PHP等等,如何使这些语言编写的程序能够进行互通, ...

  9. 建立自己的Web service(SOAP篇)

    1.简介 这篇文章主要介绍采用SOAP来建立以及访问Web service接口. Web service是一个平台独立的,低耦合的,自包含的.基于可编程的web的应用程序,可使用开放的XML(标准通用 ...

随机推荐

  1. CentOS下设置MySQL的root各种密码 总结

    一.更改mysql密码常用的三种方法 大部分情况下,一般用户没有权限更改密码,只有申请了权限或root用户才可以更改密码: 1.方法1:用mysqladmin mysqladmin -u root p ...

  2. easyui学习笔记10—手风琴格子始终展开和多个格子展开

    始终打开有时候可能会很管用,其实就是一个设置问题.这里就不再介绍引用的资源了,这里只看看html是怎么写的. 1.html代码 <body> <h2>Basic Accordi ...

  3. PS如何批量处理图片

    喜爱摄影的朋友可能都有这样的体会,相机里面存了大量的图片,一般都是2048×1536或者更大像素的照片,每张都有1M以上,如果设置的清晰度高,则照片就更大,这样的图片是无法上传到博客中的(博客要求每张 ...

  4. net core web服务器实现

    net core 系列 18 web服务器实现 一. ASP.NET Core Module 在介绍ASP.NET Core Web实现之前,先来了解下ASP.NET Core Module.该模块是 ...

  5. 《DSP using MATLAB》Problem 4.26

    Y(z)部分分式展开, 零状态响应和零输入响应的部分分式展开,

  6. cf 557D 二分图黑白染色

    题意:给出一个 n 点 m 边的图,问最少加多少边使其能够存在奇环,加最少边的情况数有多少种 奇环和偶环其实就是二分图的性质:二分图不存在奇环,所以只要判断这张图是否是二分图就行了: 如果本身就不是二 ...

  7. JQuery禁止回车提交表单

    //禁止回车键提交表单——动态绑定 $(function(){ $("input").on('keypress',  //所有input标签回车无效,当然,可以根据需求自定义 fu ...

  8. ES6必知必会 (四)—— Symbol、Set和Map

    Symbol 1.Symbol 是 ES6 引入了一种新的原始数据类型,表示独一无二的值.它是 JavaScript 语言的第七种数据类型,前六种分别是:undefined.null.布尔值(Bool ...

  9. Makefile在内核编译中的使用

    1.一个配置选项选中多个文件 path:drivers/media/i2c/adv748x adv748x-objs := \ adv748x-afe.o \ adv748x-core.o \ adv ...

  10. nexus && minio s3 存储私有镜像

    对于新版本的nexus 已经支持s3 存储了(3.12),但是企业内部可能还是需要使用私有部署的 还好我们有minio,具体的介绍就不说了 minio 项目运行 参考项目: https://githu ...