关于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. 批处理设置IP地址 - imsoft.cnblogs

    批处理设置IP地址 不知朋友们是否有这样的经历,把本本带到单位上网时,由于单位需要配固定IP地址,而家里是自动获得IP地址的,所以每天都要对这个IP地址设置来设置去,那么有没有简单方便的办法呢?其实我 ...

  2. poj-1015(状态转移的方向(01背包)和结果的输出)

    #include <iostream> #include <algorithm> #include <cstring> #include <vector> ...

  3. CTF-练习平台-Misc之 再来一道隐写

    十二.再来一道隐写 下载文件后打开,用常用的几个方法都没有找到有用的信息,然后观察图片发现搞度有点低,所以用WinHex打开把图片高度改大,保存.再次打开图片发现flag

  4. CTF之猪圈密码

    猪圈密码又称济会密码,朱高密码,是一种简单的替代密码,所以安全性很低

  5. JSON字符串-赋张最初接触后台从map转json的方法

    **************************************** json数组: *************************************************** ...

  6. hasura graphql-engine v1.0.0-alpha26 版本新功能

    hasura 发布了graphql-engine v1.0.0-alpha26 版本,有一些破坏的变动,以及方便的新特性 破坏性变动 order_by 从 order_by: id_asc 为 ord ...

  7. apache flink kubernetes 运行试用

    类似docker-compose 运行模式,使用的是deploy 的模式 deploy yaml 文件 deploy-k8s-yaml apiVersion: extensions/v1beta1 k ...

  8. mac上安装nginx

    终端执行: brew install nginx nginx 默认安装在 /usr/local/Cellar/nginx/1.12.2 conf 文件默认安装在 /usr/local/etc/ngin ...

  9. 管理node.js版本的模块:n

    n模块的使用: 命令 作用 yarn global add n 全局安装n n stable 升级node.js到最新稳定版 n v0.10.26 或 n 0.10.26 升级到指定版本号

  10. 【数据库】mysql的安装

    打开下载的mysql安装文件mysql-5.0.27-win32.zip,双击解压缩,运行“setup.exe”,出现如下界面 mysql安装向导启动,按“Next”继续 选择安装类型,有“Typic ...