VICA全称VAT Invoice Client Platform(增值税发票客户端平台),顾名思义就是公司增值税发票业务相关处理的客户端集成平台。在VICA出现之前,公司发票开具的技术主要是依赖于ActiveX控件,因为在航信或者百旺的单机开票中需要浏览器与本地开票的COM组件交互,这给我们带来了一系列的限制:必须使用IE浏览器;必须开放满足ActiveX在IE上加载的权限;开票的业务必须发生在启用IE的开票机上。这些限制严重的阻碍了公司业务的深耕与推广,我们面临的需求很明确:1.解耦IE浏览器,不再限制对浏览器的使用; 2:部署实施简化,对客户端权限设置大幅降低;3:解耦开票机,支持分布式共享开票,以上就是研发VICA的初始需求。在后续的发展过程中,我们发现公司不少产品都需要对接VICA并提出了各自的需求,因为VICA在设计上的一个额外重心:必须支持定制化。

现在让我们来看一看VICA的单机版物理架构图1:

其中右侧的ACME和简税就是公司的两大业务产品线,左侧部分就是我们今天重点说的VICA。

VICA由客户端和服务器组成,客户端采用.Net的Winform技术构建,服务器端又由三部分组成:1.Socket服务(Netty); 2.轻量级Http服务(Vert.x);3 更新服务(Spring Boot)

通常Socket服务与Http服务在单服务器模式下集成在一个进程中,更新服务则挂在独立的进程中。调用流程:业务产品线调用VICA开放的http发票接口,http服务将接收到的请求转交给Socket服务并在其中封装成命令推送至指定的客户端,客户端接受并处理命令,最后将处理结果通过回调的方式返回给各个业务产品线。

为了满足互联网产品线的需求,我们还设计了分布式版本的物理架构图2:

我们在单机版的物理架构图中扩展了4个设备节点:1.socket负载均衡,应对大量客户端连接的压力;2. Web负载均衡,应对外部App的高并发压力; 3. 服务总线与Redis缓存服务,用于解耦socket服务和web服务,确保职责范围内的压力不直接向后传递。这种架构较好的满足了高并发带来的压力,解决了互联网产品线的需求,但是增加了部署的复杂度,不适用于一般的企业项目的部署。图1和图2解决了各个产品线的不同调用需求,但是部署逻辑上是不一致的,这为开发带来了额外的工作量和非一致性框架,在一个Team里这个问题需要尽可能的避免,我们下一步的工作就是为单机版和分布式版VICA提供框架一致性编程。

  了解完VICA在物理架构上的大概情况后,我们把介绍重点转向客户端,客户端上真正实现了对发票业务的支持,通过Winform封装组件DLL,各个产品线不用再依赖于ActiveX的开票方式,极大的简化了用户环境上的权限设置,并且做到了业务系统与开票系统分布式办公的可能。VICA架构图3:

作为一个客户端平台,VICA基于平台+插件的机制做了分层处理,在平台层上专注于客户端程序的通信与协议解析,插件加载,更新服务,队列服务等基础功能的实现并向上层开放编程SDK,在插件层则承载了具体功能的实现;整个框架充分使用依赖倒置原则,在平台上提供了大量的依赖注入点,插件与平台解耦,通过侵入式的向平台注入多态实现来完成各个产品线在VICA上的功能实现,真正做到即插即用,一致性编程,发布时确认而非编译时确认版本等优点。在命令处理上,客户端提供了三层队列来分割一次命令的处理:请求队列,响应队列,尾队列。请求队列负责缓存用户请求,并在入队的前后完成对命令有效性,排队约束,开票防重复等工作;响应队列则负责缓存用户待回调的命令结果,提供了单线程会回调和多线程回调的机制;尾队列主要缓存回调失败的结果并根据一定的策略进行定时回调,确保将命令结果务必返回给各个业务产品线。

未完待续。。。

VICA概述及架构设计的更多相关文章

  1. Redis缓存项目应用架构设计二

    一.概述 由于架构设计一里面如果多平台公用相同Key的缓存更改配置后需要多平台上传最新的缓存配置文件来更新,比较麻烦,更新了架构设计二实现了缓存配置的集中管理,不过这样有有了过于中心化的问题,后续在看 ...

  2. VICA 架构设计(1)

    本文记录最近完成的一个通用实时通信客户端的架构.   背景 我们公司是做税务相关的软件,有针对大客户 MIS 系统,也有针对中小客户的 SaaS 平台.这些系统虽然都是 B/S 的,但是也需要使用 A ...

  3. VICA 架构设计

    本文记录最近完成的一个通用实时通信客户端的架构. 背景 我们公司是做税务相关的软件,有针对大客户 MIS 系统,也有针对中小客户的 SaaS 平台.这些系统虽然都是 B/S 的,但是也需要使用 Act ...

  4. ClickHouse(02)ClickHouse架构设计介绍概述与ClickHouse数据分片设计

    ClickHouse核心架构设计是怎么样的?ClickHouse核心架构模块分为两个部分:ClickHouse执行过程架构和ClickHouse数据存储架构,下面分别详细介绍. ClickHouse执 ...

  5. 基于token的多平台身份认证架构设计

    基于token的多平台身份认证架构设计 1   概述 在存在账号体系的信息系统中,对身份的鉴定是非常重要的事情. 随着移动互联网时代到来,客户端的类型越来越多, 逐渐出现了 一个服务器,N个客户端的格 ...

  6. ENode框架Conference案例分析系列之 - 架构设计

    Conference架构概述 先贴一下Conference案例的在线地址,UI因为完全拿了微软的实现,所以都是英文的,以后我有空再改为中文的. Conference后台会议管理:http://www. ...

  7. .NET架构设计、框架设计系列文章总结

    从事.NET开发到现在已经有七个年头了.慢慢的可能会很少写.NET文章了.不知不觉竟然走了这么多年,热爱.NET热爱c#.突然想对这一路的经历进行一个总结. 是时候开始下一阶段的旅途,希望这些文章可以 ...

  8. Web信息架构——设计大型网站(第3版)(久负盛名经典再现,信息架构设计领域基石之作!)

    Web信息架构——设计大型网站(第3版)(久负盛名经典再现,信息架构设计领域基石之作!) [美]]Peter Morville(彼得·莫维尔)  Louis Rosenfeld(路易斯·罗森菲尔德) ...

  9. 简述移动端IM开发的那些坑:架构设计、通信协议和客户端

    1.前言 有过移动端开发经历的开发者都深有体会:移动端IM的开发,与传统PC端IM有很大的不同,尤其无线网络的不可靠性.移动端硬件设备资源的有限性等问题,导致一个完整的移动端IM架构设计和实现都充满着 ...

随机推荐

  1. JDK源码那些事儿之常用的ArrayList

    前面已经讲解集合中的HashMap并且也对其中使用的红黑树结构做了对应的说明,这次就来看下简单一些的另一个集合类,也是日常经常使用到的ArrayList,整体来说,算是比较好理解的集合了,一起来看下 ...

  2. js获取链接?后边的参数名称或者值

    1.获取后边的参数名称<script type="text/javascript"> var url = location.search; //获取url中" ...

  3. mysql基础篇--删除

    语法 truncate table 表名; #清空整个表的数据 delete from 表名 where 筛选条件; #按筛选条件删除数据 /* delete和truncate的区别 delete可以 ...

  4. 从 ES6 到 ES10 的新特性万字大总结

    以下文章来源于鱼头的Web海洋 ,作者陈大鱼头   鱼头的Web海洋 一个名为Web的海洋世界 (给前端大全加星标,提升前端技能) 作者:鱼头的Web海洋 公号 / 陈大鱼头 (本文来自作者投稿) 介 ...

  5. Codeforces Round #588 (Div. 2) D题【补题ING】

    思路:先找出现次数>=2数.然后在取跑所有数,需要考虑一般情况(当一个人比另一个人的ai小且他们的与运算等于小的那个人的ai那么可以知道大的那个人必定强于ai小的那个人). 则可以用位运算实现判 ...

  6. 030_根据 md5 校验码,检测文件是否被修改

    #!/bin/bash#本示例脚本检测的是/etc 目录下所有的 conf 结尾的文件,根据实际情况,可以修改为其他目录或文件#本脚本在目标数据没有被修改时执行一次,当怀疑数据被人篡改,再执行一次#将 ...

  7. Django—Ajax

    Ajax-get url url(r'^ajax_add/', views.ajax_add), url(r'^ajax_demo1/', views.ajax_demo1), 视图 def ajax ...

  8. 【概率论】4-5:均值和中值(The Mean and the Median)

    title: [概率论]4-5:均值和中值(The Mean and the Median) categories: - Mathematic - Probability keywords: - Me ...

  9. windows游戏编程X86 (内存)寄存器相关的基本概念

    本系列文章由jadeshu编写,转载请注明出处.http://blog.csdn.net/jadeshu/article/details/22446971 作者:jadeshu   邮箱: jades ...

  10. java编写网站数据抓取

    来公司已经俩月了,每天加班平均工时11个小时的我又想起了老东家温馨舒适安逸的生活.已经有好久没时间读博客写博客了,我觉得我退步了,嗯嗯,我很不开心 今天记录下抓数据的一些东西吧. 数据抓取现在是很普遍 ...