方案汇总

API设计

基于https。
只提供纯数据。
基于一开始提出的restful方案外,提出了读写分离方案如下。

  • 相比restful,url可以表示动作,如下的url是允许的。
    /accounts/1/update

  • http GET表示读操作,POST表示写操作

  • 响应状态与restful方案相同
应用架构

  • API网关
    一旦API规模扩大,再加上微服务的使用,路由分发、管理、监控马上就会变得繁琐、复杂,需要有相应工具来解决这个问题,参考工具orange
    在前期API规模还小的时候,可以直接使用nginx管理。

  • 微服务
    微服务解决快速小规模迭代、水平扩展方面的问题。
    诸如“服务间相互调用”,属于系统架构方面的问题,是SOA的目标,此“服务”并不等同于微服务的“服务”。

  • 工程模块划分

    1. framework。基础框架、工具库,业务无关,基于spring boot。(包含全部service接口定义,及部分默认驱动实现)
    2. service-driver(s)。基础service驱动。(例如cache的redis驱动、filesystem的mongodb驱动等)
    3. common-biz。通用业务逻辑。
    4. common-web。web相关的通用业务逻辑。
    5. 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出现在上游以至于污染下游模块。

  1. filesystem default
  2. session default、log default
  3. auth default
  4. cache default
  5. queue
  6. event
  7. mail
  8. sms
web样例

基于web的业务模块

Web服务端开发需要考虑的问题(续)的更多相关文章

  1. Web服务端开发需要考虑的问题

    API设计 是否Restful. 首先需要清楚,Restful是一种风格而不是规范,不存在必须遵守的问题. Restful本质上是对HTTP API进行有效的分类. 分类是应该的,可以让API组织变得 ...

  2. Delphi XE5通过WebService开发Web服务端和手机客户端

    Delphi XE5通过WebService开发Web服务端和手机客户端介绍 我们开发一个三层的android程序 建立一个webservices  stand-alone vcl applicati ...

  3. Swift3.0服务端开发(一) 完整示例概述及Perfect环境搭建与配置(服务端+iOS端)

    本篇博客算是一个开头,接下来会持续更新使用Swift3.0开发服务端相关的博客.当然,我们使用目前使用Swift开发服务端较为成熟的框架Perfect来实现.Perfect框架是加拿大一个创业团队开发 ...

  4. 关于如何提高Web服务端并发效率的异步编程技术

    最近我研究技术的一个重点是java的多线程开发,在我早期学习java的时候,很多书上把java的多线程开发标榜为简单易用,这个简单易用是以C语言作为参照的,不过我也没有使用过C语言开发过多线程,我只知 ...

  5. Web服务端软件的服务品质概要

    软件品质概述 提供同样功能.产品和服务的服务者中, 竞争力来自功能的多样化和服务品质的差异化, 无论是个体.企业还是国家. 这里的服务指功能.产品的实现程度和处理能力,以及研发/客服提供的技术支持程度 ...

  6. 在线教学、视频会议 Webus Fox(2) 服务端开发手册

    上次在<在线教学.视频会议软件 Webus Fox(1)文本.语音.视频聊天及电子白板基本用法>里介绍了软件的基本用法.本文主要介绍服务器端如何配置.开发. 1. 配置 1.1 IIS配置 ...

  7. 如何提高Web服务端并发效率的异步编程技术

    作为一名web工程师都希望自己做的web应用能被越来越多的人使用,如果我们所做的web应用随着用户的增多而宕机了,那么越来越多的人就会变得越来越少了,为了让我们的web应用能有更多人使用,我们就得提升 ...

  8. 如何有效快速提高Java服务端开发人员的技术水平?

    我相信很多工作了3-5年的开发人员都会经常问自己几个问题: 1.为什么总是感觉技术没有质的提高? 2.如何能够有效和快速的提高自身的技术水平? 3.如何进入到一个牛逼的大公司,认识牛逼的人? 这篇文章 ...

  9. Web服务端性能提升实践

    随着互联网的不断发展,日常生活中越来越多的需求通过网络来实现,从衣食住行到金融教育,从口袋到身份,人们无时无刻不依赖着网络,而且越来越多的人通过网络来完成自己的需求. 作为直接面对来自客户请求的Web ...

随机推荐

  1. CentOS SVN强制用户提交时写日志

    问题:在项目提交时候不写日志,在后期查看修改历史时需要对比版本才知道提交原因.解决方案:在svn服务端通过hooks在提交时强制要求写日志.#!/bin/shREPOS="$1"T ...

  2. 史上最全PHP正则表达式实例汇总

    收集了一份php正则表达式的实例教程,真心不错,记录下. 正则表达式用于字符串处理.表单验证等场合,实用高效. 一些常用的表达式: $str = preg_replace("/(<a. ...

  3. Unity5 BakeGI(Mixed Lighting)小记

    1.模型需勾选Generate Lightmap UVs,否则烘培图像撕裂. 2.关于为何新版的改叫Mixed Lighting,猜测是之前属于全部烘培,现在算是部分烘培,实时阴影和烘培阴影可以混用, ...

  4. oracle 负载均衡连接方式常用SQL语句备忘录

    1.---表中有重复记录用SQL语句查询出来 select * from Recharge where RechargeSerial in (select RechargeSerial from Re ...

  5. [Windows Azure] Management REST API Reference

    Management REST API Reference 27 out of 42 rated this helpful - Rate this topic The SQL Database Man ...

  6. 每天一个linux命令(4) df命令

    linux中df命令的功能是用来检查linux服务器的文件系统的磁盘空间占用情况.可以利用该命令来获取硬盘被占用了多少空间,目前还剩下多少空间等信息. 1.命令格式: df [选项] [文件] 2.命 ...

  7. 【内核】几个重要的linux内核文件

    Preface 当用户编译一个linux内核代码后,会产生几个文件:vmlinz.initrd.img, 以及System.map,如果配置过grub引导管理器程序,会在/boot目录下看到这几个文件 ...

  8. DCHP是什么意思

    不是DCHP,应该是DHCP. DHCP(Dynamic Host Configuration Protocol,动态主机配置协议)是一个局域网的网络协议,使用UDP协议工作, 主要有两个用途:给内部 ...

  9. django模型创建

    定义模型 模型,属性,表,字段之间的关系 一个模型类在数据库中对应一张表,在模型类中定义的属性,对应该模型对照表中的一个字段 定义属性:见下文 创建模型类 元选项 在模型类中定义Meta类,用于设置元 ...

  10. iOSAFNetworking 网络请求

    前言 在 iOS 开发中,一般情况下,简单的向某个 Web 站点简单的页面提交请求并获取服务器的响应,用 Xcode 自带的 NSURLConnection 是能胜任的.但是,在绝大部分下我们所需要访 ...