Web-Business-Application-Solution

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

Web-Business-Application-Solution

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

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

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

我简单的画了个 架构图:docker

我原本画了一个架构图的,可是又不知道怎么把图片贴进来,因此就文字描述一下了。以下:数据库

架构小程序

  Webc#

  缓存后端

  数据库centos

这个架构里只有 水平伸缩。这样比较简单。当 访问量 增大时,水平扩展 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——基本使用介绍 

http://www.javashuo.com/article/p-zdquyrbj-ka.html

小白科普:Netty有什么用? 

http://www.javashuo.com/article/p-dadjaojn-hv.html

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

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

Polly.net 待更新

log4net Nlog 

http://www.javashuo.com/article/p-fcrbgana-mk.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

以后会慢慢更新。 ^ ^

相关文章
相关标签/搜索
本站公众号
   欢迎关注本站公众号,获取更多信息