关于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. Try .NET

    微软新出的好东西——Try .NET,该平台可以让开发者直接在线上编写并运行 .NET 代码. 没啥好说的进去就完事了 平台链接:https://try.dot.net/?fromGist=df448 ...

  2. C# 使用GZip对字符串压缩和解压

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.I ...

  3. 《DSP using MATLAB》Problem 3.12

  4. 进程间通信--POSIX共享内存

    1.参考:https://www.cnblogs.com/Anker/archive/2013/01/19/2867696.html

  5. mysql学习--mysql必知必会

      上图为数据库操作分类:     下面的操作參考(mysql必知必会) 创建数据库 运行脚本建表: mysql> create database mytest; Query OK, 1 row ...

  6. kettle--window开发环境和linux运行环境的迁移

    首先要做的是将kettle在linux下搭建好. 一.搭建linux的kettle环境 1.1解压 (my_python_env)[root@hadoop26 ~]# .zip -d /usr/loc ...

  7. 消息队列在VB.NET数据库开发中的应用

    我们先简单的了解一下什么是消息队列(MSMQ)?消息队列是 Windows 2000(NT也有MSMQ,WIN95/98/me/xp不含消息队列服务但是支持客户端的运行)操作系统中通讯的基础,也是用于 ...

  8. linux中tomcat内存溢出解决办法

    用命令 tail -f /root/apache-tomcat-6.0.20/logs/catalina.out(需要找到tomcat路径) 查看日志,查看是否有错误 linux中tomcat内存溢出 ...

  9. Spring MVC 向页面传值-Map、Model、ModelMap、ModelAndView

    Spring MVC 向页面传值,有4种方式: ModelAndView Map Model ModelMap 使用后面3种方式,都是在方法参数中,指定一个该类型的参数. Model Model 是一 ...

  10. mysql 存储过程知识点

    一.创建存储过程 create procedure sp_name() begin ......... end 二.调用存储过程 1.基本语法:call sp_name(): 注意:存储过程名称后面必 ...