项目地址 :  https://github.com/kelin-xycs/Web-Business-Application-Solution

Web-Business-Application-Solution

大家好,这个项目的目的,是 为 企业应用 + 互联网商业应用 提供一个 开源 解决方案。

这个项目 设计 为 组件 方式。不搞大包大揽。按需引用 需要的模块 就行,就像组件一样。^ ^ 这样避免了 侵入性,铁板一块,难理解,难维护。

企业应用 + 互联网商业应用,要 解决 的 第一个问题是 Web 大规模 使用。

我简单的画了个 架构图:

我本来画了一个架构图的,但是又不知道怎么把图片贴进来,所以就文字描述一下了。如下:

架构

Web

缓存

数据库

这个架构里只有 水平伸缩。这样比较简单。当 访问量 增大时,水平扩展 Web层,缓存层 就行。 数据库的话,现在 分布式数据库 用的还不普遍。对于 单主机 的 数据库,扩展CPU 核心数,内存;使用SSD硬盘就行。 比如 SqlServer 2017,配置了 足够的 CPU 核心数,内存,SSD,在 大数据量 高并发 时 的 表现很好。

缓存层 的 使用方法,可谓 各家各派,各种方法方式。^ ^ 我的想法比较简单,就是 避免频繁的对数据库的读写。 具体的说,就是,在进行 业务运算和处理 时,把数据从数据库读取到 缓存,然后 运算处理。运算处理完成后,再把结果批量更新回数据库。运算过程中,对于数据的读写都是在缓存进行。 这样可以解决数据库成为瓶颈的问题。

这个架构,我把它叫做“3.5层架构”。因为 缓存层 算 0.5层 嘛。 ^ ^

上面是 架构。

下面我们说说 部署。我们希望做出一套 虚拟机(云服务器) + 容器编排 + 负载均衡 + Redis 来构建 Web 集群 的 解决方案。 有个网友提供了一套方案,可以参考: centos 下docker 一键部署php和tomcat环境 https://github.com/kingkoo1985/docker_lnmtp

接下来是 运维。根据 DevOps 的 理论,我再发展一下,就是: 开发 = 运维 。大家都是 开发人员,只不过这段时间我做 开发,你做 运维;下个月 我做 运维,你做 开发。 对不对? ^ ^  这样就好玩了。

这套解决方案的 关键词 是 架构 部署 运维。

其实我不太赞同 微服务。但 SOA 倒是可能成为 趋势。因为 平台 与 平台 之间的 交互 应该会是一个 趋势。 微服务 的 第一个 课题 就是 实现 数据一致性。SOA 也需要 解决 这个问题。 但实际上,数据不一致 并不可怕,关键在于 清晰的 记录Log,及 提示出来, 让 用户 和 各方 能够清楚的看到 这一笔交易 是 失败 的,问题出在了哪里,接下来要怎么处理。 我们为此提供了一个 组件 SOALog。 SOALog 的功能就是 记录 Log 到 数据库 里。 见  https://github.com/kelin-xycs/SOALog 。 所以,在 调用服务失败 的时候,可以用 SOALog 记录 Log 到 数据库 里。 Log 记录到 数据库 的 优点 是 便于 查询 分析,还可以用 报表 呈现出来。 报表 也可以呈现给 用户和相关各方 看,作为问题处理追踪 的 一个 报表。 总的来说,这是一种 松耦合 乐观 的 数据一致性 解决方案。

在 服务 调用中,会 涉及 “熔断” “重试” 等概念。我写了一个 熔断 重试 的 例子,见  https://github.com/kelin-xycs/FusingAndReTrySample

这里想表达的一些理念是:

少搞一点 封装, 少搞一点 控制反转(Ioc), 少搞一点 AOP, 少搞一些 “声明式”。

不要隐藏太多代码,让 代码 回归 代码。

是 找回 80 年代 写 Basic 的 那种感觉 的 时候了。 ^ ^

负载均衡 方面,公有云可以使用 云 提供的 负载均衡 服务,比如 阿里云 的 弹性计算 负载均衡。 企业内部私有云,可以使用 Nginx。Nginx 是一个 反向代理服务器。可以实现 基于 Http 转发 的 负载均衡。 是一个 使用广泛,高效,稳定 的 负载均衡 服务器。 据说 使用 Nginx 可以 支持 每分钟 1 万笔 的 交易量。当然,也可能更多。 ^ ^

盒子科技刘恒:聚合支付系统演讲
https://mp.weixin.qq.com/s?__biz=MzI3MzEzMDI1OQ==&mid=2651820556&idx=1&sn=31d7e9e786900dd7c2826e5789b369ee&chksm=f0dcc470c7ab4d66ba3f25f8dbdc52d343f746670a1932b4645f59c5248de593e3510168ef16&mpshare=1&scene=1&srcid=0525gGj2hr3MGMzcVHFO4X77&pass_ticket=E9nUT%2BrfK4Ex1y5eEmKzEc1DgUpiL9DiF%2FUb4PrrmEJy8KKXtD2rQl5p7mepKihX#rd

参考上文。 我觉得,我们可以用手头的一些技术,来 搭建 可靠的 “高并发 分布式 业务系统” 架构。 用于 企业应用 + 互联网应用。 手头 的 技术, 包括 RPC MQ 缓存(Redis) 网关。 可以 通过 集群 (负载均衡) 来 实现 水平伸缩, 以 满足 吞吐量 的 需求。 同步 服务 使用 RPC, 异步 服务 使用 MQ。
这个 架构 到 目前为止 看起来 很美好, 但 有一个 技术 难点 或者说 重点 是 热扩展。 实际上, 应用层 很 容易 实现 热扩展。 比如 , Http 可以使用 Nginx, MQ 可以使用 RabbitMQ 集群, 缓存 可以使用 Redis 集群。 而 网络层 的 热扩展 则 需要 一些 底层 的 技术 ,,或者说 专业 的 产品。 比如 F5 HAProxy LVS , 或者 阿里云 弹性计算。 不过 刚刚 看了一下资料, Nginx 也 支持 http tcp udp 的 负载均衡 了。 热扩展 的 问题 解决 了, 基本上 就 没什么 问题 了。 接下来 就是 整个架构 运作 流程 的 监控, 用 上文 《聚合支付系统演讲》 里 文章 最后的话说, 就是 “全链路监控”。 这个 部分 说白了 其实 就是 记录 Log 到 数据库,用 NLog 可以 实现。 现在有一款 性能监控 工具 Apache Sky Walking, 据说 “开箱即用”, 提供了 仪表盘,各种报表, 可以 来 分析 和 呈现 Log, 也就是 整个 系统 运作流程 监控。 要 使用 Apache Sky Walk 可能 要 实现 它 的 “探针”, 或者 使用 它 现成 的 “探针”,,,这跟 NLog 原理上 也是一样的。

O 了。

其实 我 还有 一套 架构, 叫做 “ 1 Binary ” 架构。 1 Binary 开箱即用。

怎么实现 扩展 呢 ? n Deploy

合起来 就是 1 Binary + n Deploy 。

顶多 再 加 一个 缓存层,

O 了 。

关于 ORM 和 数据操作, 我 比较 喜欢 一个 超轻量 的 Entity 库(Active Record) + Sql 查询 DataTable 。

一个 超轻量 的 Entity 库, 只需要 实现 将 单笔资料 映射 到 Entity 对象, 并 实现 单笔资料 的 增删改查 就行。 Sql 查询 DataTable 的 方式 会 很 灵活 高效, 直观, 简单明了。 ORM 的 缓存, 在 集群(负载均衡) 的 情况 下, 会 有点 鸡肋, 因为 服务器 的 缓存 之间 不能 达到 数据一致。 所以,在 集群(负载均衡) 的 情况 下, 缓存 通常 会采用 分布式缓存,如 Redis。 LinQ 的 数据查询筛选 功能, 可以说是 好东东, 在 业务逻辑 里, 有时候 需要对 少量资料 作 distinct group by order by sum 等 时, 会 很方便, 自己 写 循环 会 比较 麻烦。 但 LinQ 对于 2 个 超过 1000笔 资料 的 集合 join 时, 性能 会 变慢, 因为 LinQ 没有 索引 的 观念。 所以,对于 资料量 比较 大的 join, 或者说 广义 的 数据关系运算 ,, 交给 数据库 来 完成, 会比较好。 因为 这是 数据库 的 专业。 现在 硬盘 都是 SSD , 不用 怕 伤 硬盘 嘛 。 ^^
在 索引 和 临时索引 的 机制 下, 数据库 可以 轻松 的 完成 数据 查询 任务。 实际上, 真正 造成 数据库 负担 和 瓶颈 的, 是 大数据量 表 频繁 Insert 索引排序 。
排序 会 造成 很大 的 时间复杂度。 在 SSD 硬盘 普及 的 今天, 查询 是 健康操作。 说到这里, 我 产生 了 一个 小想法, 我 打算 写一个 对 DataTable 使用 Sql 来 进行 数据 查询 的 小 库 。 主要 是 支持 distinct goup by order by sum 。 还有 就是 上面说的 一个超轻量 的 Entity 库。

解决方案组件 和 参考资料 如下:

解决方案组件:

WebApiClient ,一款基于HttpClient封装,只需要定义c#接口并修饰相关特性,即可异步调用远程http接口的客户端库

https://github.com/dotnetcore/WebApiClient

MultiThreadFileScanner,一个 多线程 检索 文件内容 的 小程序

https://github.com/kelin-xycs/MultiThreadFileScanner

SOALog,为 SOA 架构 提供一种 松耦合 乐观 的 数据一致性 解决方案,说白了这个组件的功能就是 记录 Log 到 数据库 里,详细介绍 见 上文。

https://github.com/kelin-xycs/SOALoghttps://github.com/kelin-xycs/SOALog

FusingAndReTrySample, 熔断 重试 的 例子。

https://github.com/kelin-xycs/FusingAndReTrySample

阿里云弹性计算

https://www.aliyun.com/?utm_medium=text&utm_source=bdbrand&utm_campaign=bdbrand&utm_content=se_32492

centos 下docker 一键部署php和tomcat环境

https://github.com/kingkoo1985/docker_lnmtp

参考资料:

《后端架构师技术图谱》

https://github.com/xingshaocheng/architect-awesome

日访问量百亿级的应用如何做缓存架构设计

https://mp.weixin.qq.com/s?__biz=MzI3MzEzMDI1OQ==&mid=2651820285&idx=1&sn=b5f9fcb6ec6838afd5428070a1d81707&chksm=f0dcc681c7ab4f9734dc2b6a015c2508983df34cc004cd7be5a8269284bed5a444e68cbef896&mpshare=1&scene=1&srcid=0507vgwEC6jt4bKXLkrtXM5G&pass_ticket=XkwMJABPdvsBn%2F6Dky%2BMLVyhCKt55wJ1twxtjGvQgYWJEmAjjrE%2BdtRHT5jkaxtW#rd

DevOps老司机如何兼顾运维与开发?(附脑图)

https://mp.weixin.qq.com/s?__biz=MzI3MzEzMDI1OQ==&mid=2651820291&idx=1&sn=a704126dfee9762d74e1c30e3464f439&chksm=f0dcc77fc7ab4e690fb8310ab8ee1eb6624686e62f70a61a7149d299d9a6f01822ca9017953e&mpshare=1&scene=1&srcid=0508rgQzU5eAd11ccS8zL0Af&pass_ticket=XkwMJABPdvsBn%2F6Dky%2BMLVyhCKt55wJ1twxtjGvQgYWJEmAjjrE%2BdtRHT5jkaxtW#rd

蚂蚁金服CTO程立:金融级分布式交易的技术路径

https://mp.weixin.qq.com/s?__biz=MzI3MzEzMDI1OQ==&mid=2651820298&idx=1&sn=e01179f16295ac1fddc3c33696845fe4&chksm=f0dcc776c7ab4e604e1d7d3171708a40331e1e0dce100579026df9b4365be1f7af0e37da5e0a&mpshare=1&scene=1&srcid=0509JF8HPfpgyAQL3orPFGXq&pass_ticket=XkwMJABPdvsBn%2F6Dky%2BMLVyhCKt55wJ1twxtjGvQgYWJEmAjjrE%2BdtRHT5jkaxtW#rd

Oracle, Red Hat等大厂近期密集发布,加强支持Kubernetes

https://mp.weixin.qq.com/s?__biz=MzIzNjUxMzk2NQ==&mid=2247489297&idx=1&sn=ddcd1d728a7aa130e9ae950a12a17d64&chksm=e8d7e8d3dfa061c5c84f144005ea54d6ce03a73a48cd180af35bf9294615f5e01187cf0e2fc1&mpshare=1&scene=1&srcid=0507k5qY4RlrzKFodWKULXVl&pass_ticket=XkwMJABPdvsBn%2F6Dky%2BMLVyhCKt55wJ1twxtjGvQgYWJEmAjjrE%2BdtRHT5jkaxtW#rd

Netty——基本使用介绍

https://blog.csdn.net/haoyuyang/article/details/53243785

小白科普:Netty有什么用?

https://blog.csdn.net/bjweimengshu/article/details/78786315

Cef ,CEF:给客户端内嵌一个Chrome吧

https://www.itsvse.com/thread-4102-1-1.html

Polly.net 待更新

log4net Nlog

https://www.cnblogs.com/qinjin/p/5134982.html https://blog.csdn.net/lx520aa/article/details/77950057http://www.cnblogs.com/Terrylee/archive/2006/12/03/opensource_framework_and_resource_recommendation_Log.html

基于.NET Core 2.0 开发的跨平台支付SDK集。目前支持:支付宝(Alipay)、微信支付(WeChatPay)、QQ钱包(QPay)、京东支付(JDPay)、连连支付(LianLianPay)、银联支付(UnionPay)

https://github.com/Essensoft/Payment

支付宝(Alipay)服务端SDK,采用.NET Standard 2.0,支持.NET Core 2.0,与官方SDK接口完全相同。完全可以按照官方文档进行开发。除了支持支付以外,官方SDK支持的功能本SDK全部支持,比如生活号、服务窗、行业合作等,且用法几乎一样,代码都可参考官方文档代码。

https://github.com/dotnetcore/Alipay.AopSdk.Core

之后会慢慢更新。 ^ ^

Web-Business-Application-Solution的更多相关文章

  1. 如何关闭tornado.web的Application

    研究热更新Python程序时,需要将已有的HTTP服务器重启. 我的HTTP服务器是用tornado.web.Application生成的,这样很简单: import tornado.web weba ...

  2. ASP.NET AJAX web chat application

    ASP.NET AJAX web chat application The project illustrates how to design a simple AJAX web chat appli ...

  3. ABAP术语-BAPI (Business Application Programming Interface)

    BAPI (Business Application Programming Interface) 原文:http://www.cnblogs.com/qiangsheng/archive/2007/ ...

  4. [Windows Azure] Adding Sign-On to Your Web Application Using Windows Azure AD

    Adding Sign-On to Your Web Application Using Windows Azure AD 14 out of 19 rated this helpful - Rate ...

  5. You may receive an exception when you browse a .NET Framework 2.0 ASP.NET Web application

    SYMPTOMS When you browse a Microsoft .NET Framework 2.0 ASP.NET Web application, you may receive one ...

  6. [Windows Azure] Building the web role for the Windows Azure Email Service application - 3 of 5

    Building the web role for the Windows Azure Email Service application - 3 of 5. This is the third tu ...

  7. web application 访问控制

    http://secappdev.org/handouts/2012/Jim%20Manico%20%26%20%20Eoin%20Keary/Final%20-%20Access%20Control ...

  8. Creating a web application.

    About creating web GIS applications As you learn and use ArcGIS for Server, you'll probably reach th ...

  9. WEB Application Development Integrator : 应用设置

    1.1.       系统安装 应用 Oracle EBS WEB Application Development Integrator WEB ADI在Oracle EBS 11.5.10.* 版本 ...

  10. IIS7 Microsoft.Web.Administration 创建Application问题

    在使用DirectoryEntry操作IIS时,可以设置很多属性.但使用Microsoft.Web.Administration中的一些类时,不知道在哪设置.例如:AccessScript,Acces ...

随机推荐

  1. WCF会话(Session)与实例(Instance)管理

    一.理解Session 1.Session的作用:保留Client和Service之间交互的状态,确保Client与Service之间交互唯一性(SessionId),即:多个Client同时访问Se ...

  2. Sortable Observable Collection in C#

    Sorting outside the collection protected override void OnNavigatedTo(NavigationEventArgs e) { if (Se ...

  3. spoj 346

    当一个数大于等于12  那分别处以2, 3, 4之后的和一定大于本身    但是直接递归会超时    然后发现有人用map存了   膜拜..... #include <cstdio> #i ...

  4. Java学习之利用集合发牌小练习

    /* * 思路: * A:创建一个HashMap集合 * B:创建一个ArrayList集合 * C:创建花色数组和点数数组 * D:从0开始往HashMap里面存储编号,并存储对应的牌同时往Arra ...

  5. Gym 100917L Liesbeth and the String 规律&amp;&amp;胡搞

    题目: Description standard input/outputStatements Little Liesbeth likes to play with strings. Initiall ...

  6. springMVC 静态文件 访问

    1. 新建web project 2. 导入所需jar包 3. 更改web.xml <?xml version="1.0" encoding="UTF-8" ...

  7. Unity3D中切换场景可能导致材质变暗的问题

    Unity版本:5.1.1f1 做公司项目的时候,无意间发现了一个很奇葩的现象:场景A(纯UI,故没有光源)转场到场景B的时候,B中原有的光源似乎失效了,但在Hierarchy窗口中能够看到光源存在, ...

  8. Java第三方支付接入案例(支付宝)

    开源项目链接 Kitty 开源权限管理系统 项目地址:https://gitee.com/liuge1988/kitty 演示地址:http://139.196.87.48:9002/kitty 用户 ...

  9. 项目Alpha冲刺--1/10

    项目Alpha冲刺--1/10 1.团队信息 团队名称:基于云的胜利冲锋队 成员信息 队员学号 队员姓名 个人博客地址 备注 221500201 孙文慈 https://www.cnblogs.com ...

  10. 【疑】checkpoint防火墙双链路切换导致丢包问题

    拓扑: 外线联通.电信各200M,通过边界交换机(纯二层,用于分线),分别接到主.备防火墙. 具体配置如下: 故障现象: 由于电信光缆中断导致电信链路不可用.大量员工反映频繁出现断网现象,通过公网注册 ...