平台架构

基于WebAPI的开放平台架构实践

https://www.cnblogs.com/lucky_hu/p/9030667.html

新生代码农如何在硝烟弥漫的商业丛林中生存和崛起? 洞见,让一部分先遇见未来。

关注公众号“码农商业参谋",获取更多技术干货和商业新风向。

背景

随着业务的发展,越来越多不同系统之间需要数据往来,我们和外部系统之间产生了数据接口的对接。当然,有我们提供给外部系统(工具)的,也有我们调用第三方的。而这里重点讲一下我们对外的接口。

目前,我们运营和维护着诸多的对外接口,很多现有的接口服务寄宿在各个不同的项目,哪些应用在使用api也没有管理起来。并且以前的调用模式也是比较复杂,排错困难。

目前已经对外提供服务的有短信平台,审核中心,ETCP,官网系列(充值,登陆,注册),服务中心,AuterCenter,HomeAPI(即将上线)。同时内部还有工单系统,安全中心,基础服务,GEMC等。其他的还有一些内部工具服务。

从目前的需求上看,我们对外提供接口的需求很大。当然,能够持续对外提供服务是好事。

但是,对接标准不统一,服务寄宿不合理, 无文档,无测试报告,无demo,无接口变更记录都将导致api的可持续和可维护变得越来越难。

我们将更多的考虑对外服务的安全性,高可靠性,可维护性,尤其是离产品和用户最近的那些API。 同时,尽量做到所有api及其调用关系都有数据可查。因此,对于新接入的API,提供专业、规范的设计标准和文档规范势在必行。

让所有支撑服务化,所有服务标准化。

OPenAPI将作为支撑的中间件,与其他系统服务一起为运维、安全、产品和运营的各种需求提供强有力支撑。

需求

1.对服务提供方(如官网服务)及其API进行管理

2.对接入的应用进行管理

1)用户先申请appkey,appsecrect

2)下载sdk

3)通过appkey,appsecrect生成token

_aop_timestamp String 否 请求时间戳

_aop_signature String 是 请求签名

access_token String 否 用户授权令牌

4)调用API

3.api规范

1)命名规范

  入参,返回值

  参考:

          https://developer.github.com/v3/

          http://cizixs.com/2016/12/12/restful-api-design-guide

2)API文档规范

4.日志记录

1) API调用记录

2) API调用异常记录

3)....

5.安全

1)参数加密

2)IP白名单限制

3)接口限制

6.性能

1)客户端缓存

2)服务端缓存

3)限流

  对于高频访问进行限制,如每个appkley1min调用次数

使用场景
使用场景.png

架构设计

1
基础架构

uLinker.png

2
UML设计
ulLinker_uml2_0.png

3
认证机制

验证(Authentication)是为了确定用户是其申明的身份,比如提供账户的密码。不然的话,任何人伪造成其他身份(比如其他用户或者管理员)是非常危险的

这里使用TOKEN+签名认证 保证请求安全性

主要原理是:

   1.做一个认证服务,提供一个认证的webapi,用户先访问它获取对应的token

   2.用户拿着相应的token以及请求的参数和服务器端提供的签名算法计算出签名后再去访问指定的api

   3.服务器端每次接收到请求就获取对应用户的token和请求参数,服务器端再次计算签名和客户端签名做对比,如果验证通过则正常访问相应的api,验证失败则返回具体的失败信息

核心实现(含代码片段):

   1.用户请求认证服务GetToken,将TOKEN保存在服务器端缓存中,并返回对应的TOKEN到客户端(该请求不需要进行签名认证)

    2.客户端调用服务器端API,需要对请求进行签名认证,签名方式如下 

1
get请求:按照请求参数名称将所有请求参数按照字母先后顺序排序得到:keyvaluekeyvalue...keyvalue 字符串如:将arong=1,mrong=2,crong=3 排序为:arong=1, crong=3,mrong=2 然后将参数名和参数值进行拼接得到参数字符串:arong1crong3mrong2。  

post请求:将请求的参数对象序列化为json格式字符串

2
在请求头中添加timespan(时间戳),nonce(随机数),appkey,appsecrect,signature(签名参数)

3
根据请求参数计算本次请求的签名,用timespan+nonc+appkey+appsecrect+token+data(请求参数字符串),得到signStr签名字符串,然后再进行排序和MD5加密得到最终的signature签名字符串,添加到请求头中

4
webapi接收到相应的请求,取出请求头中的timespan,nonc,appkey,appsecrect,signature 数据,根据timespan判断此次请求是否失效,根据appkey+appsecrect取出相应token判断token是否失效,

根据请求类型取出对应的请求参数,然后服务器端按照同样的规则重新计算请求签名,判断和请求头中的signature数据是否相同,如果相同的话则是合法请求,正常返回数据,如果不相同的话,

该请求可能被恶意篡改,禁止访问相应的数据,返回相应的错误信息

参与签名的TOKEN,整个过程中TOKEN是不参与通信的,所以只要保证TOKEN不泄露,请求就不会被伪造。

然后我们通过timestamp时间戳用来验证请求是否过期,这样就算被人拿走完整的请求链接也是无效的。

Sign签名的方式能够在一定程度上防止信息被篡改和伪造,保障通信的安全。

4
授权
(Authorization)是为了保证用户有对请求资源特定操作的权限。比如用户的私人信息只能自己能访问,其他人无法看到;有些特殊的操作只能管理员可以操作,其他用户有只读的权限等等

   1.IP白名单限制,平台服务只能接受指定IP来源的app发起的请求

   2.api限制,指定app只能访问授权访问的api

5
Token缓存设计
服务端token视角.png

服务端视角

客户端token视角.png

客户端视角

6
限流
如果对访问的次数不加控制,很可能会造成 API 被滥用,甚至被 DDos 攻击。根据使用者不同的身份对其进行限流,可以防止这些情况,减少服务器的压力。比如可以设置,用户每个小时允许发送请求的最大值

7
压测
1.自己写程序,开启多线程发起模拟请求

2.压测工具,如loadrunner

总结
这次开放平台实践的第一版已经投入使用,不断完善中。总体来看,收获颇多,同时也是实现"中台战略"真正走出的第一步。

原文地址:https://www.cnblogs.com/Leo_wl/p/9058264.html

时间: 2024-07-30 12:32:51

平台架构的相关文章

ASP.NET 让无码编程不在是梦 -.NET通用平台、通用权限、易扩展、多语言、多平台架构框架

先拿出我半前年前平台的设计初稿,经过半年的努力我已经完成了该设计稿的所有功能.并且理念已经远远超出该设计稿. 下面是一些博友对我贴子的评价: 1.楼主,想法很美好,现实很骨感,我们公司就有一套你说的这样的平台,界面都是用XML配置出来的,虽然开发效率很高,但只能做固定版式的系统,有任何版式的修改,几乎都是不可能的,高度的封装,丧失了灵活性. 2.虽然不看好,但楼主愿意试试,我还是支持的. 我对他们的评价的回复是请给我半年时间,我会证明给大家看,所以我遵守承诺来此水一贴. Landa.Best平台

构建高并发高可用的电商平台架构实践

从各个角度总结了电商平台中的架构实践,由于时间仓促,定了个初稿,待补充完善,欢迎大家一起交流. 转载请声明出处:http://blog.csdn.net/yangbutao/article/details/12242441 作者:杨步涛 关注分布式架构.大数据.搜索.开源技术 QQ:306591368 技术Blog:http://blog.csdn.net/yangbutao 一. 设计理念 1.      空间换时间 1)      多级缓存,静态化 客户端页面缓存(http header中包

对账平台架构

对账平台架构 指令 数据源 对账结果

构建高并发高可用的电商平台架构实践(上)

构建高并发高可用的电商平台架构实践(上) 一. 设计理念 1.      空间换时间 1)      多级缓存,静态化 客户端页面缓存(http header中包含Expires/Cache of Control,last modified(304,server不返回body,客户端可以继续用cache,减少流量),ETag) 反向代理缓存 应用端的缓存(memcache) 内存数据库 Buffer.cache机制(数据库,中间件等) 2)      索引 哈希.B树.倒排.bitmap 哈希索

构建高并发高可用的电商平台架构实践(下)

构建高并发高可用的电商平台架构实践(下) 6. 数据存储 数据库存储大体分为以下几类,有关系型(事务型)的数据库,以oracle.mysql为代表,有keyvalue数据库,以redis和memcached db为代表,有文档型数据库如mongodb,有列式分布式数据库以HBase,cassandra,dynamo为代表,还有其他的图形数据库.对象数据 库.xml数据库等.每种类型的数据库应用的业务领域是不一样的,下面从内存型.关系型.分布式三个维度针对相关的产品做性能可用性等方面的考量分析.

亿级用户的新浪微博平台架构

微博平台第一代架构为LAMP架构,数据库使用的是MyIsam,后台用的是php,缓存为Memcache. 随着应用规模的增长,衍生出的第二代架构对业务功能进行了模块化.服务化和组件化,后台系统从php替换为Java,逐渐形成SOA架构,在很长一段时间支撑了微博平台的业务发展. 在此基础上又经过长时间的重构.线上运行.思索与沉淀,平台形成了第三代架构体系. 我们先看一张微博的核心业务图(如下),是不是非常复杂?但这已经是一个简化的不能再简化的业务图了,第三代技术体系就是为了保障在微博核心业务上快速

平台架构实践

海淘平台架构实践 1引言 随着互联网的发展,电子商务在全社会的深入普及,中国网购用户强大的消费能力已经不止满足于天猫.京东.淘宝等购物平台.据相关报道,目前国内中产阶级人数已过亿.其中一批懂英文或日文的先行者,通过双币或多币种信用卡,直接在国外电商站点上购物,直邮或者通过海外转运公司将商品运输回来,也就是所谓的“海淘”.海淘族最初的发展壮大,还得力于一批海外代购客的大力宣传,通过收取服务费以及国内国外商品的价格差赚的盆满钵满. 从2012年开始,涌现出一大批海淘平台(也属于跨境电商)创业潮,专门

大数据下的数据分析平台架构zz

转自http://www.cnblogs.com/end/archive/2012/02/05/2339152.html 随着互联网.移动互联网和物联网的发展,谁也无法否认,我们已经切实地迎来了一个海量数据的时代,数据调查公司IDC预计2011年的数据总量将达到1.8万亿GB,对这些海量数据的分析已经成为一个非常重要且紧迫的需求. 作为一家互联网数据分析公司,我们在海量数据的分析领域那真是被“逼上梁山”.多年来在严苛的业务需求和数据压力下,我们几乎尝试了所有可能的大数据分析方法,最终落地于Had

达观数据分析平台架构和Hive实践——TODO

转自: http://www.infoq.com/cn/articles/hadoop-ten-years-part03 编者按:Hadoop于2006年1月28日诞生,至今已有10年,它改变了企业对数据的存储.处理和分析的过程,加速了大数据的发展,形成了自己的极其火爆的技术生态圈,并受到非常广泛的应用.在2016年Hadoop十岁生日之际,InfoQ策划了一个Hadoop热点系列文章,为大家梳理Hadoop这十年的变化,技术圈的生态状况,回顾以前,激励以后. 近十年来,随着Hadoop生态系统

【转载】基于Docker的CaaS容器云平台架构设计及市场分析

[转自]http://www.cnblogs.com/darkprince/p/5115739.html 基于Docker的CaaS容器云平台架构设计及市场分析 ---转载请注明出处,多谢!--- 1 项目背景---概述: “在移动互联网时代,企业需要寻找新的软件交付流程和IT架构,从而实现架构平台化,交付持续化,业务服务化. 容器将成为新一代应用的标准交付件,容器云将帮助企业用户构建研发流程和云平台基础设施.缩短应用向云端交付的周期,降低运营门槛.加速企业向互联网技术和业务的双转型. 容器云将