大型应用系统的一些讨论 -- (by 曹政)

SpringBoot+Vue+MySQL 高校学科竞赛平台 完整可运行版(源码+文档) 本项目基于SpringBoot+Vue+MySQL构建高校学科竞赛管理平台,覆盖学生、教师、领队教师、管理员四大角色,实现竞赛发布、报名、刷题、评分、公示等全流程闭环管理。系统架构清晰,技术主流,配套完整源码、数据库脚本、万字论文、开题报告、答辩PPT及部署文档,支持一键运行,适用于毕业设计、课程设计及院系二次开发,真正实现“开箱即用”。 阅读详情

第一:作为OLTP应用(联机事物处理,区别于OLAP),响应速度和处理并访能力是系统整体性能评价的第一要旨。
作为带动性能提升的主要因素,占第一位的是系统的体系架构、第二位的是数据结构定义、第三位的才是选择怎样的语言和系统平台。当然,很多情况下在考虑体系结构的时候是有基于系统平台的考量,但是一般而言,系统体系结构并不是依存于某特定平台才能确定的。

作为高并访应用的OLTP而言,一般在涉及数据库操作和数据存储操作的时候,应当明确的关键问题是,数据库操作的触发和执行是不应当基于用户请求的,这也是三层体系结构的真谛所在。也就是说,如果一个用户请求就触发了一个数据库操作,不管你使用的是php,jsp,asp,cfm,fcg还是com组件或其他什么东东,严格讲都不是真正的三层体系,因为这时中间层实际上并不存在。即便使用了预编译,即便使用了数据连接池(Connect Pool),即使系统提供了足够的缓冲处理,都是不够的。

举个例子而言,如果你在一个页面上使用了计数器,最简单的方法是每次页面请求的时候,处理程序直接数据库中相关记录加1,不管使用什么语言,什么平台,或调用什么控件,亦或采用了数据库内部的存储过程处理(显然这样效率很高)。但是这还不够,比如类似于易数统计这样的系统,当它每天处理几百万至上千万请求的时候,任何数据库就都无法容忍这样的操作,因为对于update操作,数据库缓冲的存在基本是无用的。
那么取代的手段是怎样的,前台的API程序将来访请求的一些信息按照一个指定规范直接扔到指定缓冲区里面,这样API程序(请注意这里我不提CGI,CGI效率那么差,在这样的场合是不推荐的)的处理过程很简单,效率很高。后台的看守进程从缓冲区读取数据,通过指定管道(数据连接池,固定数据库连接进程维持常连接状态)和数据库进行数据更新操作,这样的好处有以下几点,第一是当并访瞬间高峰时,前台响应不会受很大影响,缓冲可能会造成溢出而损失数据,但是不会影响前台的展示,而且当缓冲合理分配时,这种压力也会减轻,而后台看守进程可以将任务负载均衡分布处理,一时处理不完的在系统负载减轻时可以继续处理,这样后台负载可以均担,减少因瞬态高峰造成系统崩溃的隐患;第二是当缓冲区数据存储合理安排时,后台可以作到批量处理,要知道数据库批量更新比一个一个单独更新的效率会高很多,这样从处理任务量上减轻系统负载!
针对以上补充一点说明,一般而言,针对良好的商业数据库而言,select操作比update操作的效率高一个数量级,因为前者可以充分利用缓冲,而后者不能,因此将update操作批量化和后台化是非常重要的!

第二:动态页面的静态化至关重要
很多人会对这个问题感到疑惑,因为提到动态页面,自然是能够根据不同条件动态显示的页面,这也是相对于静态主页的优势,为什么要退回去静态化?
其实静态化不等于就是静态主页,这也是基于效率和性能的考虑。还是用例子表达。
范例1:新闻系统
新闻的时效性是最重要的,为了减少维护和提高更新速度,现有的新闻系统很强调后台更新的即时展示。
我们现在要考虑一个问题,一个新闻系统的首页每天显示动辄几万至几百万次,而新闻每天的更新频率最多几十到几百次,也就是在新闻标题列表两次更新之间,有几千至几万人看到的是同样的东西,类似这样的东东,就要考虑静态化处理了。同样,对于每一条新闻而言,几百至几千人看到的是同样的东西,依然有这样的处理需求。类似这样的问题,作为新闻标题列表的页面和单一新闻页面,都应当是静态html发布,这样最符合效率原则,而后台的维护程序仅仅在更新和发布新闻的时候,对这种静态html以文本文件方式打开和操作,这样就不会影响时效性和维护的便捷性。新浪的新闻系统绝对是这样的,我还看到了很多免费共享软件,可惜没有这样处理的。
范例2:广告交换系统
广告交换系统和上述有一些区别,在于每个用户所看到的东西都是不同的,每次用户刷新也是不同的,这种情况下上述方式就无法解决。但是静态化的工作还是需要的。
实际上这里面有一个小窍门就是广告交换系统或类似系统(即便是商业广告投放系统)从需求定义而言并不需要100%严格的交换比例,甚至也不可能作到100%严格的交换比例,这时候后台进程就应当对需要投放的广告内容定时进行预生成(比如间隔三分钟生成一次),并放入缓冲,前台的API程序在接受用户请求后,根据用户请求的参数和条件,在预生成的广告队列里面进行二次生成,并将这次投放的记录放到存放统计的缓冲(这是本文刚开始就提到的手段,后台对统计信息的处理同前文),前台程序虽然也进行了动态生成过程,但是由于数据来源是缓冲中的预生成信息,因此处理量小,处理效率高,而后台进程则将原本需要每次请求进行的类似操作集中一次进行,同样从架构上减少了系统处理的工作量。而作为代价,仅仅是投放过程中的交换显示比会由于三分钟预生成中的统计变化而显得不那么精确,但是当系统运营时间很长以后,这种不精确会逐步调整到可以完全忽略的地步。

第三:那种语言效率最高
这是一个最原始的问题,php+zend,fcg,jsp,IIS API都宣称自己非常之快,实际上他们都是采用了提前加载,预编译,驻留内存,缓冲分配等手段,使得处理请求响应的速度非常之快,但是这种速度仅仅是处理响应的速度,当系统需要对后台数据库,对后台文件,甚至对后台shell进行操作的时候,最快的毋庸质疑,还是C语言,而且是标准C语言,有一个事实必须提醒诸位,尽管高级语言层出不穷,但是从70年代到21世纪,世界上最值钱的程序员一直是标准C的程序员(当然还有更原始的汇编程序员)。其实一个大型系统,前台动态展示采用asp也好,cfm也好,fcg也好,jsp也好都是无关紧要的,关键是采用合适的架构并把烦琐的数据操作尽可能放到后台执行。
放到后台执行的准则是,将动态化过程中所有可以集中批量处理的,所有可以通过缓冲交换的,所有重复性的工作,所有与用户请求没有直接关联的,一概放到后台,以看守进程,或者定时程序进行。

第四:安全问题考虑。
当一个大的网上应用系统,如果有些程序,访问量不高,因此网站设计者认为效率无所谓,可以通过api直接对数据库进行烦琐操作,那么就危险了,实质上那种程序往往成为基于CGI的D.o.s攻击的靶子,(本人恰恰是这方面的专家)。因为当有人通过伪装报文,瞬间大量请求这个处理效率不高,反应缓慢的程序的时候,系统资源就会大量被占用,很快就会因为系统资源过载而导致系统崩溃或拒绝服务。
请注意这种攻击是导致系统资源的过载而不是带宽,由于宽带网的接近,基于带宽的拒绝服务攻击将越来越困难,但是恰恰相反的是,基于系统资源的拒绝服务攻击将越来越容易,所以网站设计者,千万不可在任何一个地方掉以轻心,而烦琐操作后台化,对这样的攻击行为就有很好的抗击能力,这一点也是我这里再次要强调的。
再补充一句,进行这样的攻击非常容易,以至于一个完全不会写程序的人,只要懂得一些网络,就可以在很短时间掌握,并给大型站点带来严重打击。
第五:数据支持

本人罗里罗嗦这么半天,大家不知道是不是不耐烦,我有何德何能在此逞强?
www.isme.net是目前每天支撑接近300万次广告链调用的免费广告交换系统,瞬间高峰每秒请求超过50次,每天流量12G以上。我在系统正常运行的过程中作过测试(系统已经有一定负载),通过apache的ab进行标准测试,对广告链投放程序,测试结果是在100个并访情况下,瞬间处理能力可达到每秒1300次广告链请求!如果不是合理分配内存缓冲和后台看守进程的预生成,如果每个请求程序都要到数据库跑一趟,这个数字是绝对不可能达到的。

任何人都可以在apache下面用ab对自己写的程序进行速度评测,看看你的程序能达到怎样的处理能力?

IAR9.4报错之编码方式 IAR9.40编码方式错误导致的报错 阅读详情

相关推荐

【开源训练数据集2】10个最适合机器学习的股票市场数据集

​随着加密货币在世界各地的兴起,人们现在有比以往更多的投资方式。然而,这并不像低买高卖那么简单。如果你能准确预测股市,你就会成为地球上最富有的人之一。因此,之前已经有关于如何利用情绪分析来预测股市的研究。对于那些希望构建类似预测模型的人,本文将介绍 10 个用于机器学习的股票市场和加密货币数据集。

u010542847的博客 2139

asp.net百问百答

技术话题如果你已经看过我们前面的那些文章, 您有可能已经形成了这样一个想法:.NET是微软公司非常重要的战略措施,微软公司正在花费大量的时间和精力努力营建它。其中,.NET的一个不可缺少的部分是ASP.NET。现在,我们来谈一谈ASP.NET的体系结构,看看它是如何与.NET的整体架构协调工作的,以及如何利用ASP.NET开发大型网站那样的东西。我们已经做ASP.NET三年了。我们刚开始主要是研究

ToTem's BLOG 1705

深度学习初探 - 入门 DL 主流框架

这个课程主要是引导大家入门TensorFlow、Theano、Keras 及 Caffe 几个主流的深度学习框架。在课程中有关各种算法的详细推导及思想我们不会做过多的陈诉,旨在通过让同学们动手操作搭建自己的神经网络模型,了解如何使用这些框架解决实际问题。课程会基于每个框架的官方文档,先带大家熟悉框架中基本的定义语法及常用函数(可看成深度模型的小零件),每个实验最后都会综合这些零件搭建一个简易的神经深度网络模型。这个项目十分适合具有一定python编程基础,对人工智能、深度学习感兴趣的同学。Theano。

2401_86435672的博客 1235

快快丢掉ASP遗留的二十大陈旧习惯

在技术更新的进程中, 仍然有一些人死抱着已经过了气的东西不放. 也有一些人虽然进入到新的世界, 但仍摆脱不了陈旧的习惯. 我没有用”陋习”这个词, 因为我对这个词也非常反感. 新技术应该有新技术的 做法, 进入ASP.NET的世界, 就应该把以往的习惯改正, 全新的进入新的世界, 把ASP的破烂扔掉.以下列举的都是错误的做法, 请不要误以为是推荐的做法而进行推广: 1. 使用server side

ToTem's BLOG 1137

手把手教你用Wireshark抓包分析Profinet非周期通信(附实战案例)

本文详细解析了PROFINET非周期通信(RTA)的技术原理与实战应用,通过Wireshark抓包分析,揭示从PLC请求到驱动器响应的完整对话过程。涵盖实验环境搭建、关键配置步骤、典型参数访问流程及故障诊断案例,帮助工程师深入理解并优化工业网络通信性能。

Black的专栏 1050

从零到一:Python+Playwright 实现动态网站全量数据采集实战(附反爬对抗与性能优化)

在动手之前,先明确武器优势: 2. 项目结构规划 为了代码可维护性,我们采用模块化结构: 三、核心实战:构建动态采集器 第一步:初始化“隐身”浏览器 普通启动容易被检测,我们需要注入一段 JS 脚本来抹除自动化特征。 第二步:处理无限滚动与动态加载 这是动态网站的核心难点。我们需要模拟人类滚动,并等待新数据加载完成。 第三步:登录态保持与复用 避免每次运行都重新登录。我们将 Cookie 保存到本地,下次直接加载。 第四步:主流程编排 将上述模块串联起来,并加入异常重试机制。 四、进阶优化:性能与反爬

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 1163

从asp到asp.net之快速转型

1.怎样建立asp.net运行环境? asp有了IIS就可以了,而asp.net也很简单,只要在IIS基础上装一个.net Framework。那 么想要运行asp.net就会和运行asp同样简单,参照问题2。 底下是.net Framework1.1的下载地址,直接按照向导安装好就ok了! http://download.microsoft.com/download/7/b/9/7b90644d

ToTem's BLOG 1072

海格通信嵌入式面试题及参考答案

计算电路的最高工作频率如何计算? 计算电路的最高工作频率主要考虑电路中的关键路径延迟。关键路径是指在整个电路中,信号传播延迟最长的路径。电路的最高工作频率的倒数就是时钟周期,而时钟周期必须大于关键路径的延迟时间。 首先要确定电路中各个模块的延迟。比如对于组合逻辑电路,可以通过查看芯片手册获取门电路的延迟参数。以一个简单的与门、或门、非门组成的组合逻辑为例,每个门都有自己的传输延迟,把信号从输入到输出经过的所有门的延迟相加,就得到这部分组合逻辑的延迟。 对于包含寄存器的电路,还需要考虑寄

大模型大数据攻城狮的专栏 1271

百万程序员的苦恼-选择VB.NET还是C#

在过去的一年中,互联网上的各大讨论区或者电子邮件的讨论列表都对微软的VB.NET以及C#的各种优越性做了探讨。这些讨论围绕的主要问题就是,我应该先学哪一个,VB.NET还是C#? 我写这篇文章的目的就是想帮您解决这个问题。我并不是想动摇你倾向哪一种语言而是想解决一些大家在基本问题上的疑惑,以便大家能够作出自己的决定,选择一种自己觉得用起来最舒适的语言。我将尽量避免讨论一些语法上的模棱两可的话,就像

ToTem's BLOG 933

SAP Word 模板与 ABAP XML 数据流合并机制深度解析

Office Open XML 标准把一个.docx拆分成多个部件(document.xml、customXml\item1.xml 等),天然支持命名空间与 XPath;Word 在渲染时,会扫描<w:sdt>(结构化文档标签)与来确定绑定关系;在 ABAP 端,通过简单字符串替换与 XSLT 变换即可完成数据灌入,无需 COM Automation,安全且易于调试。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 372

Python 爬虫实战:拼多多商品评论情感分析(含词云生成与差评预警)

在电商行业竞争日益激烈的当下,商家对商品评论的分析需求愈发迫切。通过 Python 爬虫收集拼多多商品评论,并结合情感分析、词云可视化及差评预警技术,商家可精准洞察消费者反馈,优化商品与服务。本文将深度剖析从爬虫搭建到数据挖掘的关键环节,助力读者构建全流程电商评论分析系统。

yansideyucsdn的博客 1450

Spring Boot 数据源与 MyBatis(-Plus) 自定义配置详解

本文详解 Spring Boot 中单数据源环境下 HikariCP 与 MyBatis-Plus 的自定义配置。通过手动声明 SqlSessionFactory,实现下划线转驼峰、日志输出、一级缓存策略等精细化控制。结合 HikariCP 核心参数调优(如最大连接数、连接生命周期),确保高性能与稳定性。适用于仅需访问单一数据库的场景,避免多数据源复杂性,兼顾性能与可维护性。

BADAO_LIUMANG_QIZHI的博客 200

C#上位机开发实战全流程:从需求到落地,避坑指南+完整代码

作为一名做了5年工业自动化上位机开发的程序员,我踩过的坑比写过的代码还多——从最初串口通信粘包导致数据错乱,到可视化图表卡顿卡死,再到现场异常崩溃无日志可查,每一次踩坑都是一次血泪教训。今天这篇文章,我会把C#上位机开发的全流程拆解开,从需求分析到通信模块、数据可视化,再到异常处理,每个环节都结合工业实际场景,分享真实项目中能用的方案、完整代码和避坑技巧。不管你是刚入门的新手,还是想优化现有项目的老司机,相信都能有所收获。很多新手做上位机开发,一上来就闷头写代码,最后发现做出来的东西不符合现场需求——比如客

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 996

Java EE 进阶:8.MyBatis 操作数据库(入门)(第一弹)

Java EE 进阶:8.MyBatis 操作数据库(入门)(第一弹)

要努力去发光,而不是被照亮~ 132

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

Docker Compose:搭建本地多服务开发环境

从一个 Java API、PostgreSQL 和 Redis 开始,配置服务名、端口、环境变量、健康检查、数据卷和依赖关系。理解 Compose 文件如何被解析、项目如何隔离,以及哪些数据不能依赖“重建容器”保留,能够把个人开发环境整理成团队可复用的启动入口。

m0_62221377的博客 461

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

AI全栈实战 | 3.9-01 爬虫入门:requests 加 BeautifulSoup 三分钟跑通,但 90% 的人栽在这 4 个“礼貌“问题上

⚠️:本文内容仅用于。请遵守目标站点的服务条款与相关法律法规,不得对目标服务造成负担,不得采集、传播个人隐私数据。技术是中性的,边界在你手里。爬虫的入门技术(requests 发请求 + BeautifulSoup 解析)三分钟就能学会。真正区分"会用爬虫"和"会做爬虫的人"的,是这篇我们跑通"请求→解析→存储"的最小闭环,然后重点把"合规与礼貌"这根弦给你绷上。

源码获取 | 运行部署 | 定制二开修改,如果回复不及时请耐心等待,请见谅。 413

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

数据库主键选型指南:BIGINT vs VARCHAR

主键选型关乎数据库性能与架构演进。BIGINT(如雪花算法)在顺序写入、二级索引开销和分布式生成上优势显著,适合高并发核心链路;而传统 VARCHAR UUIDv4 因随机性导致频繁页分裂、存储膨胀,性能堪忧。UUIDv7 通过时间戳有序性实现高效追加写入,结合 BINARY(16) 存储可兼顾性能与安全,成为现代微服务新选择。关键在于:主键应稳定、无业务含义,优先选用趋势递增的紧凑类型,并根据场景合理采用双主键模式或 ULID 等替代方案。

小李同学的博客 301

自动化运维选型:四条技术路线的能力边界,以及它们为什么不能互相替代

自动化运维怎么选型?拆解配置管理、基础设施即代码、作业调度与场景化编排四条技术路线边界,分析账本归属与时间语义差异,给出四种架构组合与判断点,帮企业看清为何不能互相替代。

trainsignalcn的专栏 327

C++算法(七)

C++ stack算法题和一些客观题

2503_94479566的博客 370

不用再为文本搜索单独维护一套系统!全文检索深度解析

为了给商品、客服工单或者企业知识库增加一个搜索框,企业往往需要在业务数据库之外,再部署一套Elasticsearch。数据库保存商品、订单和用户等真实业务数据,搜索引擎保存另一份文本索引;两套系统之间,还需要通过CDC、消息队列或者同步程序持续传输数据。一个看似简单的搜索需求,最后可能变成两套集群、两份数据和一条必须保持稳定的数据链路。由此产生的问题并不少:数据库已经完成更新,搜索结果却可能尚未同步;业务查询同时涉及文本、库存、权限和订单状态时,应用需要在两个系统之间来回组合结果;

TiDB 社区干货传送门 255

IDEA 简介:从零认识 IntelliJ IDEA

IDEA 全称,是由 JetBrains 公司开发的一款主流 Java 集成开发环境(IDE)。它集代码编辑、编译、调试、测试、版本控制、构建管理等功能于一体,被大量 Java 开发者视为日常开发的首选工具。所谓 IDE(Integrated Development Environment,集成开发环境),就是把写代码所需的各类工具整合到同一个界面中。相比只用文本编辑器加命令行编译,IDE 能显著减少重复操作,让开发者把精力集中在业务逻辑上。

ztI10的博客 154

48-逻辑结构表空间段区块

默认 10%,意思是块里的空闲空间低于 10% 时就不再插入新行,留着给已有行的 UPDATE 变胖用。注意 INSERT 过程中每次申请新区,都是一次潜在的空间报错点,如果表空间满了,此刻就会抛 ORA-01653。剩下的空间被谁占了?段的每个区可以落在表空间的任一数据文件,所以 2T 的表在 32G 单文件上限(smallfile)的世界里照样能活——多加文件就行。,一张只有两个 CLOB 字段的表,实际在库里是三个段(表段 + 两个 LOBSEGMENT),空间统计漏算 LOB 段是新手常犯的错。

yuhou25的博客 286

市场调查与统计分析专业大学期间考证怎么安排?

市场调查与统计分析专业的考证规划,适合从一份完整的调查报告倒推:能不能设计问卷、判断样本是否合理、清洗数据,再把分析结果转化为业务建议?围绕这条能力链安排证书,比单纯按“热门程度”报名更有针对性。结合2026年的学习安排,并为2027年的实习、升学和求职预留时间,大学期间可以重点考虑六类证书:全国计算机等级考试证书、大学英语四级或六级成绩报告单、CDA数据分析师、初级统计专业技术资格证书、微软办公软件国际认证中的Excel相关证书,以及软考数据库系统工程师资格证书。

cc572502653的博客 159

Oracle 19c 在线重定义后旧表空间清理及 ASM 存储资源回收 SOP

Oracle 19c 在线重定义后旧表空间清理与 ASM 存储资源回收 SOP

「YYL DBA手记」 数据库 · 架构 · 运维 · 实战 yyldba.blog.youkuaiyun.com 488

大表 ALTER TABLE 怎么做?NineData OnlineDDL 配置与执行实践

介绍NineData OnlineDDL大表变更实践,涵盖执行策略、切表控制、拷贝批次与可视化进度追踪。

dbasenewbie的博客 272

从事件风暴到因果收敛:Mopheus多智能体协同事件触发架构与防循环实践

在构建生产级多智能体协同引擎的过程中,我们总结了三条核心工程准则:1.不可变因果链优于事后关系反查在高度并发且异步的多智能体网络中,因果关系的追溯绝不能依赖事后查库反查关联;将只增的因果祖先链显式封装在事件载荷与任务上下文中,以O(1)的内存检查实现确定性极高的闭环防范。2.生产端纯粹广播与消费端前置极速过滤是高吞吐的基石遵循严格的Pub/Sub模式,让核心业务实体与下游智能体编排解耦;通过调度层内存条件字典求值(conditions),在纳秒级内过滤掉99%的无关事件,保障零业务侵入与极高的系统吞吐。

weixin_54551388的博客 240
上一篇: 从asp到asp.net之快速转型
下一篇: 百万程序员的苦恼-选择VB.NET还是C#
ztmaster
博客等级 码龄24年 13粉丝 94原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值