Web服务端开发需要考虑的问题(续)

方案汇总
API设计
应用架构
代码库管理
工具链
工作计划
目标
预期
关键过程
service-driver接口定义及实现
web样例

方案汇总

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的业务模块

时间: 2024-08-15 04:10:19

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

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

API设计 是否Restful. 首先需要清楚,Restful是一种风格而不是规范,不存在必须遵守的问题. Restful本质上是对HTTP API进行有效的分类. 分类是应该的,可以让API组织变得有序.层次清晰 一定要以Restful的风格分类吗? Restful风格的特点 url表示的只是资源,没有动作,所以只会出现名词,不会出现动词 这样的url不对 /accounts/1/transfer/499 应该是这样 /accounts/1/transactions/499 想想传统的logi

Android服务端开发1-使用Eclipse搭建Java Web服务端

本篇博客介绍如何使用Eclipse来创建一个Java Web程序,为后面讲通过Android客户端跟服务端进行交互打下基础,关于服务端可以选用的程序很多,主流的搭配是Android客户端+PHP服务端,我们也可以使用Android客户端+Java EE服务端这样的搭配,就看公司是以哪种方式提供了. 创建一个Java Web程序,没有特别复杂的流程,我们先准备一下原材料: 1. Eclipse(注:这个不是ADT Bundle,最好到官网下载针对开发Java EE的IDE,如果可以的话,选中MyE

如何进行SuperMap iServer服务端开发

有时候在进行地图应用开发时,可能单纯的客户端无法满足要求(如功能和性能等因素),这时就需要进行iServer的服务端开发.SuperMap iServer 6R/7c的服务端开发步骤如下: 一.在Eclipse中新建一个Dynamic Web Project 此过程截图略去 二.引用iServer所需的各类jar包 经测试后发现,必须引用iServer/WEB-INF/lib下的所有jar包,否则运行时会出现一些奇怪的错误.这些jar包所在的位置为[iServer安装目录]\webapps\is

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

上次在<在线教学.视频会议软件 Webus Fox(1)文本.语音.视频聊天及电子白板基本用法>里介绍了软件的基本用法.本文主要介绍服务器端如何配置.开发. 1配置 1.1 IIS配置 Fox支持最基本的.net Framework4.0和IIS6/IIS7. 在IIS7中,对应应用程序池,需要配置为经典模式,支持.net4.0 1.2 web.config配置 Fox服务器端是暂时是host在IIS上,将来将Host在Windows Service上.对于IIS的配置,web.config是

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

作为一名web工程师都希望自己做的web应用能被越来越多的人使用,如果我们所做的web应用随着用户的增多而宕机了,那么越来越多的人就会变得越来越少了,为了让我们的web应用能有更多人使用,我们就得提升web应用服务端的并发能力.那么我们如何做到这点了,根据现有的并发技术我们会有如下选择: 第一个做法:为每个客户端发送给服务端的请求都开启一个线程,等请求处理完毕后该线程就被销毁掉,这种做法很直观,但是在现代的web服务器里这种做法已经很少使用了,原因是新建一个线程,销毁一个线程的开销(开销是指占用

现代Java服务端开发核心技术栈

现代Java服务端开发核心技术栈 现代Java服务端开发核心技术 Java语言基础篇 互联网生态下的Java Java开发工具箱 Java基础项目搭建 Java数据存储 Java数据运算 Java程序流程控制 Java数组 Java面向对象程序设计 Java异常处理 Java枚举 Java注解 Java 泛型 Java集合 Java IO Java NIO Java操作数据库 Java日志 Java操作XML Java正则表达式 Java8新特性实战 Java9新特性实战 Java10新特性实战

现代Java服务端开发核心技术之开发工具箱

现代Java服务端开发核心技术之开发工具箱 现代Java服务端开发核心技术 2.1 开发工具概述 俗话说,工欲善其事必先利其器,掌握一些日常开中常用的工具软件能够大大提开发效率,工具本身的目的也是解放生产力.在安装各种软件时注意如果没有特殊需要不必使用最新版本,尤其是操作系统,例如当前(2018/10/12)最新版的macOS是10.14,但是运行在macOS之上的其他应用软件可能还没有及时做兼容新系统的版本,可能在系统升级之后无法正常使用,因此推荐在新系统正式推出半年后再升级最为稳妥. 而且软

个人公众号服务端开发Demo

公众号出来很久了,也可以个人申请.知道公众号的服务端开发其实很简单,接口调用封装,数据存取,不外如是. 人一旦懒了,真的是 "无可救药" 了...现简单描述晚到的公众号HelloWorld 思路 公众号里面简单的文章展示,静态博客展示这种好像没啥特别的,就跳过了. 在聊天框输入参数, 传到云服务器处理,然后请求个三方API获取信息,封装返回.嗯,这就算个基本的Demo了 准备 1, 得申请个公众号,个人的,免费 2, 最好买一台云服务器,双十一的阿里云最低100¥/Year,heihe

从架构师视角看是否该用Kotlin做服务端开发?

前言 自从Oracle收购Sun之后,对Java收费或加强控制的尝试从未间断,谷歌与Oracle围绕Java API的官司也跌宕起伏.虽然Oracle只是针对Oracle JDK8的升级收费,并释放了OpenJDK一直开源这份善意,但是如果没有各个大非Oracle的JVM.JDK和众多其它基于JVM的语言,Oracle这份善意能维持到什么时候可不好说. 大厂要从JVM和JDK的层面早做打算,而广大中小企业,就只能先从Java语言的层面,先找到Oracle以外的备胎.自从被谷歌钦定为Android