项目地址 :  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. DevExpress WPF v18.2新版亮点(四)

    行业领先的.NET界面控件2018年第二次重大更新——DevExpress v18.2日前正式发布,本站将以连载的形式为大家介绍新版本新功能.本文将介绍了DevExpress WPF v18.2的新功 ...

  2. L304 What Is Death?

    How should we define the death of a person? Philosophers and physicians have long pondered this ques ...

  3. [ log4j ]-日志文件的使用

    在java文件中通过 log4j 输出日志信息 1,先引入 log4j-xx.x.jar 包 2,新建一个日志类 PrintLog4j.java: package com.stu.log4j; imp ...

  4. Delphi 10.3最新消息

    因为Google Play的要求,使Delphi官方被动的透出点消息:https://community.embarcadero.com/blogs/entry/deadline-approachin ...

  5. 【Python】多线程-1

    #练习:创建一个线程 from threading import Thread import time def run(a = None, b = None) : print a, b time.sl ...

  6. 三层交换机实现VLAN间通信

    实验要求:使用三层交换机,让同一vlan的主机能通信,不同vlan的主机也能通信 拓扑如下: 涉及内容: 1.VTP的创建和配置 2.vlan的创建和划分 3.三层交换机的配置 4.端口的trunk模 ...

  7. AMM调整为ASMM命令(关闭memory_target自动管理方式)

    客户生产系统,AIX oracle 11.2.0.4 数据库版本,2节点RAC. 操作系统内存,均为125G,调整前,使用oracle memory_target自动调整分配方式,memory_max ...

  8. 九度OJ-1131-合唱排队-双向递增子序列

    题目1131:合唱队形 时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:4948 解决:1570 题目描述: N位同学站成一排,音乐老师要请其中的(N-K)位同学出列,使得剩下的K位同学不交 ...

  9. Linux 下 SVN服务器搭建

    使用Linux(CentOS)搭建SVN服务器全攻略 虽然在windows上搭建SVN很简单,但是效能却不高,这当然是和linux相比了.然而在linux上搭建SVN却非常繁琐,所以今天这篇文章就来一 ...

  10. Unity 3D调用Windows打开、保存窗口、文件浏览器

    Unity调用Window窗口 本文提供全流程,中文翻译. Chinar 坚持将简单的生活方式,带给世人!(拥有更好的阅读体验 -- 高分辨率用户请根据需求调整网页缩放比例) Chinar -- 心分 ...