Web服务端开发需要考虑的问题(续)
方案汇总
API设计
基于https。
只提供纯数据。
基于一开始提出的restful方案外,提出了读写分离方案如下。
相比restful,url可以表示动作,如下的url是允许的。
/accounts/1/updatehttp GET表示读操作,POST表示写操作
- 响应状态与restful方案相同
应用架构

API网关
一旦API规模扩大,再加上微服务的使用,路由分发、管理、监控马上就会变得繁琐、复杂,需要有相应工具来解决这个问题,参考工具orange。
在前期API规模还小的时候,可以直接使用nginx管理。微服务
微服务解决快速小规模迭代、水平扩展方面的问题。
诸如“服务间相互调用”,属于系统架构方面的问题,是SOA的目标,此“服务”并不等同于微服务的“服务”。工程模块划分
- framework。基础框架、工具库,业务无关,基于spring boot。(包含全部service接口定义,及部分默认驱动实现)
- service-driver(s)。基础service驱动。(例如cache的redis驱动、filesystem的mongodb驱动等)
- common-biz。通用业务逻辑。
- common-web。web相关的通用业务逻辑。
- module(s)。具体业务模块,web类型的模块基于spring webmvc。
业务模块内层次划分,以web模块为例
- request interceptor(filter)
- controller(action)
- view resolver
- model
- biz。跨controller、model的业务逻辑。
- actuator。内部管理和监控接口。
代码库管理
工程划分
- 框架库
包含的模块有:framework、service-driver、common-biz、common-web、web样例 - 业务库
自身模块划分如前文。同时依赖框架库输出的framework、service-driver、common-biz模块。
- 框架库
业务库分支方案
约定current的意思是当前最大版本号
- 常设分支包括多个线上分支,master、dev分支。
- 线上分支均为版本分支,如v1、v2。
版本分支的生成。
- v(current) <= master < v(current + 1)
- 当api有不兼容改变时,在master的head上新建v(current + 1)分支,然后current += 1。
以v1分支为例,当current>1且需要在v1分支上新增commit时,在v1的head上新建v1-release分支,开发过程中产生的commit提交到v1-release,测试通过后合并到v1,上线后删除v1-release。
- 线上分支不会合并,当某个commit涉及多个线上分支时,使用cherry-pick的方式同步到多个分支。
- 版本分支自身会分出子服务分支以适应微服务部署,如v1可以分出v1-account、v1-order等。
子服务分支的新增commit用独立的release分支完成。
代码复用
- 有私有maven仓库,按通常的依赖管理复用
- 无私有maven仓库,业务工程库使用git subtree引入框架工程库
工具链
只提供基于默认工具的工程指导,使用其他工具的成员,如eclipse,需要有能力自行解决工具问题。
- idea
- gradle
- sourcetree
工作计划
需要完成框架库、搭建业务库。
目标
项目可满足基本的业务需求,并可投入实际使用。
完成框架库、搭建业务库。
预期
- 所有应带默认实现的service-driver已完成local类型的实现。
- web样例中演示带默认实现的service的使用,关系数据库工具的使用。
关键过程
service-driver接口定义及实现
自上而下优先级由高到低,自左至右优先级不分先后。
低优先级的service可能会依赖高优先级service。
带default标签表示framework模块会有默认实现,不需要driver(s)模块。
大部分driver都需要考虑local、global两种类型的实现。
不好抽象出接口或者工作量大且已有成熟第三方定义及实现的service,例如关系数据库工具、httpclient工具等,不在framework中定义,直接在业务模块中引用,避免抽象得不好的service出现在上游以至于污染下游模块。
- filesystem
default - session
default、logdefault - auth
default - cache
default - queue
- event
- sms
web样例
基于web的业务模块
Web服务端开发需要考虑的问题(续)的更多相关文章
- Web服务端开发需要考虑的问题
API设计 是否Restful. 首先需要清楚,Restful是一种风格而不是规范,不存在必须遵守的问题. Restful本质上是对HTTP API进行有效的分类. 分类是应该的,可以让API组织变得 ...
- Delphi XE5通过WebService开发Web服务端和手机客户端
Delphi XE5通过WebService开发Web服务端和手机客户端介绍 我们开发一个三层的android程序 建立一个webservices stand-alone vcl applicati ...
- Swift3.0服务端开发(一) 完整示例概述及Perfect环境搭建与配置(服务端+iOS端)
本篇博客算是一个开头,接下来会持续更新使用Swift3.0开发服务端相关的博客.当然,我们使用目前使用Swift开发服务端较为成熟的框架Perfect来实现.Perfect框架是加拿大一个创业团队开发 ...
- 关于如何提高Web服务端并发效率的异步编程技术
最近我研究技术的一个重点是java的多线程开发,在我早期学习java的时候,很多书上把java的多线程开发标榜为简单易用,这个简单易用是以C语言作为参照的,不过我也没有使用过C语言开发过多线程,我只知 ...
- Web服务端软件的服务品质概要
软件品质概述 提供同样功能.产品和服务的服务者中, 竞争力来自功能的多样化和服务品质的差异化, 无论是个体.企业还是国家. 这里的服务指功能.产品的实现程度和处理能力,以及研发/客服提供的技术支持程度 ...
- 在线教学、视频会议 Webus Fox(2) 服务端开发手册
上次在<在线教学.视频会议软件 Webus Fox(1)文本.语音.视频聊天及电子白板基本用法>里介绍了软件的基本用法.本文主要介绍服务器端如何配置.开发. 1. 配置 1.1 IIS配置 ...
- 如何提高Web服务端并发效率的异步编程技术
作为一名web工程师都希望自己做的web应用能被越来越多的人使用,如果我们所做的web应用随着用户的增多而宕机了,那么越来越多的人就会变得越来越少了,为了让我们的web应用能有更多人使用,我们就得提升 ...
- 如何有效快速提高Java服务端开发人员的技术水平?
我相信很多工作了3-5年的开发人员都会经常问自己几个问题: 1.为什么总是感觉技术没有质的提高? 2.如何能够有效和快速的提高自身的技术水平? 3.如何进入到一个牛逼的大公司,认识牛逼的人? 这篇文章 ...
- Web服务端性能提升实践
随着互联网的不断发展,日常生活中越来越多的需求通过网络来实现,从衣食住行到金融教育,从口袋到身份,人们无时无刻不依赖着网络,而且越来越多的人通过网络来完成自己的需求. 作为直接面对来自客户请求的Web ...
随机推荐
- CentOS SVN强制用户提交时写日志
问题:在项目提交时候不写日志,在后期查看修改历史时需要对比版本才知道提交原因.解决方案:在svn服务端通过hooks在提交时强制要求写日志.#!/bin/shREPOS="$1"T ...
- 史上最全PHP正则表达式实例汇总
收集了一份php正则表达式的实例教程,真心不错,记录下. 正则表达式用于字符串处理.表单验证等场合,实用高效. 一些常用的表达式: $str = preg_replace("/(<a. ...
- Unity5 BakeGI(Mixed Lighting)小记
1.模型需勾选Generate Lightmap UVs,否则烘培图像撕裂. 2.关于为何新版的改叫Mixed Lighting,猜测是之前属于全部烘培,现在算是部分烘培,实时阴影和烘培阴影可以混用, ...
- oracle 负载均衡连接方式常用SQL语句备忘录
1.---表中有重复记录用SQL语句查询出来 select * from Recharge where RechargeSerial in (select RechargeSerial from Re ...
- [Windows Azure] Management REST API Reference
Management REST API Reference 27 out of 42 rated this helpful - Rate this topic The SQL Database Man ...
- 每天一个linux命令(4) df命令
linux中df命令的功能是用来检查linux服务器的文件系统的磁盘空间占用情况.可以利用该命令来获取硬盘被占用了多少空间,目前还剩下多少空间等信息. 1.命令格式: df [选项] [文件] 2.命 ...
- 【内核】几个重要的linux内核文件
Preface 当用户编译一个linux内核代码后,会产生几个文件:vmlinz.initrd.img, 以及System.map,如果配置过grub引导管理器程序,会在/boot目录下看到这几个文件 ...
- DCHP是什么意思
不是DCHP,应该是DHCP. DHCP(Dynamic Host Configuration Protocol,动态主机配置协议)是一个局域网的网络协议,使用UDP协议工作, 主要有两个用途:给内部 ...
- django模型创建
定义模型 模型,属性,表,字段之间的关系 一个模型类在数据库中对应一张表,在模型类中定义的属性,对应该模型对照表中的一个字段 定义属性:见下文 创建模型类 元选项 在模型类中定义Meta类,用于设置元 ...
- iOSAFNetworking 网络请求
前言 在 iOS 开发中,一般情况下,简单的向某个 Web 站点简单的页面提交请求并获取服务器的响应,用 Xcode 自带的 NSURLConnection 是能胜任的.但是,在绝大部分下我们所需要访 ...