当前位置: 首页 > news >正文

java开发转架构_【转】从架构差异看Web高性能开发(转载自csdn)

一般情况下,架构分两种来讨论的,一种是开发架构,一种是部署架构

部署架构,就是开发完的程序在实际运行环境下,通过负载均衡,DNS轮询,SquID等等来减轻单台服务器负载,达到性能优化的目的

这里大家估计更想了解的是开发上的架构

我对这个的观点是,所有的架构都是死的,而Web高性能开发优化策略是活的,我在开发中,所有的东西都不是一定要按照什么固定的模式,去死开发,更多的是针对需要优化的信息进行针对处理,下面说说我的优化策略

1、数据库优化,这个是所有的优化策略中中重要的,可以说数据库设计的好坏,直接影响了一个系统的承受力。普通的数据库细节优化,网上已经有大笔文章了,没什么好说的,想了解的自己去找。而我要说的就是在数据库设计中的一个思路,分库、分表、缓存表。

1)分库指的是在设计中,要考虑到后期数据量大的情况下,你的数据库能够随着应用随时拆分,这个拆分并不是只是针对功能模块对应的数据拆分。举个例子,就用这个CSDN论坛吧,比如里面有很多类,C#版,JAVA版,系统设计版等等,拆分的目的是可以把任何一个版的数据拆分到单独的一个数据库中去。

2)分表相对的就好理解了,就是说同类型的数据,你可以为了性能优化,进行拆分到多个表中去,拆分规则可以有多种,按照类型、按照时间、按照姓名等等。同样以这个CSDN论坛来说,我要设计的话,我会按照里面的大版面进行数据库拆分,而按照小版,进行表拆分。

3)而对于缓存表,网上我还很少看到有人来说这个东西,这个的目的就是针对一个大的数据表中,一般中有死数据库和活动数据,比如用户表,里面有很多基本不来的用户,那么针对这样的情况,当表数据上了千万的时候,我就会采用缓存表的模式来进行了,就是在实际表和用户之间在搭建一个临时表,访问用户数据时,首先访问临时表,如果不存在,则进入实际表中获取,然后放入缓存表中,同时会通过后台线程,定时将缓存表数据同步到实际数据库中,同步时间可以针对系统要求来进行。

如果理解了上面的东西,那么在数据承载上,可以上升一个很大的层次。。。。。

2、程序优化。这个对我来说相对的就不是那么的看中了,程序的优化,我更多的认为是个技巧,而不是架构了,包括现在经常见到的那些各种设计模式,另外这里提下,很多设计模式,他的出发点并不是Web高性能开发,而是考虑的系统扩展性,所以在单个技术细节上,很多人也发现了,并不如直接的写代码来的快,但是就是推荐那样,是因为采用了那些模式的程序,扩展性比你的强,那么一旦系统要求变动,或者是要求进行拆分的时候要比你方便的多,在分担到多个服务器上时,性能相对的就起到了优化也。废话了通,继续说我对程序部分经常采用的方式吧

1)首推静态化,这个的优化效果不用多说,直接减轻了服务器负担,不过如果用上了Squid,那么有第三放来做静态,也可以达到同样的效果

2)合适的数据缓存,缓存很多人都用到了,但是在使用前,是否认真思考过为这个这个要进行Cache,Cache他的标准是什么?我说下我的标准:小数据量、大访问量、更新尽量少的数据,全部可以进行缓存。另外我提到的缓存,并不只是说。NET本身提供的Cache,我说的缓存还包括了使用 Static来进行的数据

3)活用线程,很多人的观念中感觉线程好象在B/S中是用不到的,或者是没有必要。其实这个观念完全错,在特定情况下使用线程,可以提高的局部性能不是一点两点

4)功能模块拆分,这个一般人基本都在做,我要补充的是,不只是在单个项目中进行功能模块的拆分,而是为了进行分步式开发而进行拆分

在其它的基本都是细节优化了,这个没有太多兴趣写了,网上资料应该不少,可以自己搜索查阅

上面的这几部分如果能在开发中,灵活运用上,可以说,你实现Web高性能开发,绝对不是难事。

我曾经开发的过的站点中,也有过社区,一个WEB服务器,一个DB服务器,主题帖千万,回复帖有6000W左右吧,其它数据不算,运行过程中没出过任何问题,日访问在100WPV情况下,还没有达到性能瓶颈。

原文出处:http://java.csdn.net/index.php/2009/09/07/%e4%bb%8e%e6%9e%b6%e6%9e%84%e5%b7%ae%e5%bc%82%e7%9c%8bweb%e9%ab%98%e6%80%a7%e8%83%bd%e5%bc%80%e5%8f%91/

相关文章:

  • unique paths ii java_[LeetCode][Java] Unique Paths II
  • java自定义注解嵌套_Spring-基于自定义注解和Aop动态数据源配置
  • java包名称_显示Java类的包名称
  • Java异构数据翻译器_CowNewSQL Java实现的多数据库SQL翻译器,可以把标准 生成多种 的方言,支持Oracle、 Develop 238万源代码下载- www.pudn.com...
  • linux java网络编程_Java网络编程深入之TCP协议编程
  • java顺序打印约瑟夫环_关于约瑟夫环问题,用java 编写程序,输出n个人出圈的顺序,书上的程序代码如下,但是有几点我搞不明白...
  • java翻译topping_java刚開始学习的人常见的问题
  • java里添加员工信息_SSH_框架整合4--添加员工信息
  • 毛刺现象 java_组合逻辑设计中的毛刺现象
  • java 有界类型_java泛型之有界类型
  • oracle mysql8_这一刻,MySQL 8终于追赶上了Oracle 8
  • power of three java_【LeetCode】326. Power of Three 3的幂(Easy)(JAVA)
  • python2和pytho3切换_电脑上同时安装Python2和Pytho
  • 学JS对学Java有用吗_【JS】编程语言那么多,为啥学Java的人那么多?
  • java offset用法_Java OffsetTime plusMinutes()用法及代码示例
  • -------------------- 第二讲-------- 第一节------在此给出链表的基本操作
  • [ JavaScript ] 数据结构与算法 —— 链表
  • ECMAScript入门(七)--Module语法
  • 从输入URL到页面加载发生了什么
  • 解决iview多表头动态更改列元素发生的错误
  • 面试总结JavaScript篇
  • 数组的操作
  • 思维导图—你不知道的JavaScript中卷
  • shell使用lftp连接ftp和sftp,并可以指定私钥
  • 阿里云IoT边缘计算助力企业零改造实现远程运维 ...
  • 仓管云——企业云erp功能有哪些?
  • 教程:使用iPhone相机和openCV来完成3D重建(第一部分) ...
  • 专访Pony.ai 楼天城:自动驾驶已经走过了“从0到1”,“规模”是行业的分水岭| 自动驾驶这十年 ...
  • ​ ​Redis(五)主从复制:主从模式介绍、配置、拓扑(一主一从结构、一主多从结构、树形主从结构)、原理(复制过程、​​​​​​​数据同步psync)、总结
  • ​3ds Max插件CG MAGIC图形板块为您提升线条效率!
  • ​二进制运算符:(与运算)、|(或运算)、~(取反运算)、^(异或运算)、位移运算符​
  • #我与Java虚拟机的故事#连载15:完整阅读的第一本技术书籍
  • (1)Android开发优化---------UI优化
  • (补)B+树一些思想
  • (区间dp) (经典例题) 石子合并
  • (数据结构)顺序表的定义
  • (推荐)叮当——中文语音对话机器人
  • (一)为什么要选择C++
  • (转)创业家杂志:UCWEB天使第一步
  • .net core 6 redis操作类
  • .net redis定时_一场由fork引发的超时,让我们重新探讨了Redis的抖动问题
  • .NET8.0 AOT 经验分享 FreeSql/FreeRedis/FreeScheduler 均已通过测试
  • .NET和.COM和.CN域名区别
  • @Autowired @Resource @Qualifier的区别
  • [ 隧道技术 ] 反弹shell的集中常见方式(二)bash反弹shell
  • [ 云计算 | AWS ] AI 编程助手新势力 Amazon CodeWhisperer:优势功能及实用技巧
  • [BT]BUUCTF刷题第9天(3.27)
  • [C# WPF] DataGrid选中行或选中单元格的背景和字体颜色修改
  • [C++]18:set和map的使用
  • [CISCN 2023 初赛]go_session
  • [codeforces]Levko and Permutation
  • [delphi]保证程序只运行一个实例
  • [DevOps云实践] 彻底删除AWS云资源
  • [EFI]Lenovo ThinkPad X280电脑 Hackintosh 黑苹果引导文件
  • [Java] 什么是IoC?什么是DI?它们的区别是什么?