基于不同的数据源提供统一的RESTful风格的API

可能的数据源

Hbase

一个结构化的分布式数据库。存储非关系型数据。
提供数据查询接口有以下几种方式:

  • local API(java)
  • REST
  • Thrift
  • C/C++ Apache Hbase Client
  • use JDO with HBase
  • Scala
  • Jython

Phoenix

官方提供了一下的集成:
1.Spark
2.MapReduce
3.Pig
4.EMR
5.Python
6.Flume
7.ORM library for JAVA


而在github上有1个项目avatica(15stars其中一个我)

Spark SQL

SparkSQL是与spark深度集成的,因此没用提供给第三方开发的API是可以理解的。
PS值得注意的是:ThriftServer是一个JDBC/ODBC接口,用户可以通过JDBC/ODBC连接ThriftServer来访问SparkSQL的数据。ThriftServer在启动的时候,会启动了一个SparkSQL的应用程序,而通过JDBC/ODBC连接进来的客户端共同分享这个SparkSQL应用程序的资源,也就是说不同的用户之间可以共享数据;ThriftServer启动时还开启一个侦听器,等待JDBC客户端的连接和提交查询。

DRUID

Python\R\JavaScript\Clojure\Ruby\PHP\SQL
SQL:
1.Apache Calcite - SQL parser, planner and query engine whose Druid adapter can query data residing in Druid, and combine it with data in other locations; has local and remote JDBC drivers powered by Avatica
2.implydata/plyql - A command line and HTTP interface for issuing SQL queries to Druid

总结:go的兼容性确实不是很好,python相对于go还是好点的。其实最好的还是java。

WEB后端的技术选型Go/Python

RESTful风格

RESTful设计理念基于4点:
- Use HTTP methods explicitly.
- Be stateless.
- Expose directory structure-like URIs.
- Transfer XML, JavaScript Object Notation (JSON), or both.

总结来说:Restful并不是一种协议,而是一种web编程风格满足以下几个特点的都可以称为restful框架
1. 连接协议具有无状态(be stateless)
2. 客户端服务器结构 (分层)
3. 能够利用cache机制增进性能 (分层)
4. 统一的接口 (HTTP协议)
5. 资源的设定 (expose directory structure-like uri 显示的目录结构化资源)
6. 转移过程使用json、xml等数据格式

外链文章:http://www.ibm.com/developerworks/library/ws-restful/

web服务器端开发

web服务器端选型之语言:
1. 并发性要给力
2. 包要多
3. 框架要给力
4. 向下兼容性要好

web框架的处理流程:
1. 接受连接
2. 路由
3. handler处理

Go框架

  • beego(7.7k stars 1.9k forks)
    高性能web框架
  • fasthttp(3k 230forks)
    go的HTTP包,高性能(需要集成插件比如路由模块-handler)–httprouter(3.4k 333forks)
  • gin(7.3k 805forks)
    HTTP web框架,使用了Martini-like API,拥有更好的性能
  • martini(8.6k 909forks)
    web框架
  • iris(4.7k 229forks)
    号称最快的web框架,和fasthttp、httprouter(fasthttp-routing)集成的差不多
  • echo(5.1k 381forks)
    HTTP server框架

http://colobu.com/2016/04/06/the-fastest-golang-web-framework/

Python框架

  • django(20.7k stars 8.8forks)
    高等的web框架。
  • flask(22k stars 6.9forks)
    微型的网络框架,基于Werkzeug(实现了WSGI的库)
  • web2py(1.1k stars)
    全栈式的web框架,工业化般的支撑
  • falcon(3.1k stars)
    高性能的web框架,主打快,轻,灵活
  • bottle(3.8k stars)
    微型的网络框架
  • tornado(11.9k stars)
    异步的网络,简单的网络框架
  • webpy(3.9k stars)
    简单的web框架

web框架样本测试—Go vs Python

beego测试情况,100个并发,发送100次

Transactions:             100000 hits
Availability:             100.00 %
Elapsed time:              12.19 secs
Data transferred:          21.93 MB
Response time:              0.02 secs
Transaction rate:        8203.45 trans/sec
Throughput:             1.80 MB/sec
Concurrency:              175.61
Successful transactions:      100000
Failed transactions:               0
Longest transaction:            1.17
Shortest transaction:           0.00

flask测试情况, 100个并发,发送100次

Transactions:              99971 hits
Availability:              99.97 %
Elapsed time:              68.43 secs
Data transferred:           3.72 MB
Response time:              0.06 secs
Transaction rate:        1460.92 trans/sec
Throughput:             0.05 MB/sec
Concurrency:               90.58
Successful transactions:       99971
Failed transactions:              29
Longest transaction:           56.23
Shortest transaction:           0.02

总结:结果显而易见,go完爆python。在框架方面go的框架虽然不及python的多,但是功能还是很全的。根据数据源对接的兼容性(半斤八两),因此go更适合当web服务器端语言选型。

你可能感兴趣的:(python)