用Java做一个大流量,高并发的网站应该怎么样进行底层构架

用Java做一个大流量,高并发的网站应该怎么样进行底层构架,第1张

JVM
JEE容器中运行的JVM参数配置参数的正确使用直接关系到整个系统的性能和处理能力,JVM的调优主要是对内存管理方面的调优,优化的方向分为以下4点:
1HeapSize 堆的大小,也可以说Java虚拟机使用内存的策略,这点是非常关键的。
2GarbageCollector 通过配置相关的参数进行Java中的垃圾收集器的4个算法(策略)进行使用。
3StackSize 栈是JVM的内存指令区,每个线程都有他自己的Stack,Stack的大小限制着线程的数量。
4DeBug/Log 在JVM中还可以设置对JVM运行时的日志和JVM挂掉后的日志输出,这点非常的关键,根据各类JVM的日志输出才能配置合适的参数。
网上随处可见JVM的配置技巧,但是我还是推荐阅读Sun官方的2篇文章,可以对配置参数的其所依然有一个了解
1Java HotSpot VM Options
Java HotSpot VM Options
2Troubleshooting Guide for Java SE 6 with HotSpot VMTroubleshooting Guide for Java SE 6 with HotSpot VM
另外,我相信不是每个人攻城师都是天天对着这些JVM参数的,如果你忘记了那些关键的参数你可以输入Java -X(大写X)进行提示。
JDBC
针对MySQL的JDBC的参数在之前的文章中也有介绍过,在单台机器或者集群的环境下合理的使用JDBC中的配置参数对 *** 作数据库也有很大的影响。
一些所谓高性能的 Java ORM开源框架也就是打开了很多JDBC中的默认参数:
1例如:autoReconnect、prepStmtCacheSize、cachePrepStmts、useNewIO、blobSendChunkSize 等,
2例如集群环境下:roundRobinLoadBalance、failOverReadOnly、autoReconnectForPools、secondsBeforeRetryMaster。
具体内容可以参阅MySQL的JDBC官方使用手册:
>Tomcat 服务器是一个免费的开放源代码的Web 应用服务器,技术先进、性能稳定,而且免费,因而深受Java 爱好者的喜爱并得到了部分软件开发商的认可。其运行时占用的系统资源小,扩展性好,且支持负载平衡与邮件服务等开发应用系统常用的功能。作为一个小型的轻量级应用服务器,Tomcat在中小型系统和并发访问用户不是很多的场合下被普遍使用,成为目前比较流行的Web 应用服务器。
而JBoss Web采用业界最优的开源Java Web引擎, 将Java社区中下载量最大,用户数最多,标准支持最完备的Tomcat内核作为其Servlet容器引擎,并加以审核和调优。单纯的Tomcat性能有限,在很多地方表现有欠缺,如活动连接支持、静态内容、大文件和>一个Ceph客户端,通过librados直接与OSD交互,来存储和取出数据。为了与OSD交互,客户端应用必须直接调用librados,连接一个Ceph Monitor。一旦连接好以后,librados会从Monitor处取回一个Cluster map。当客户端的应用想读或者取数据的时候,它会创建一个I/O上下文并且与一个pool绑定。通过这个I/O上下文,客户端将Object的名字提供给librados,然后librados会根据Object的名字和Cluster map计算出相应的PG和OSD的位置。然后客户端就可以读或者写数据。客户端的应用无需知道这个集群的拓扑结构。
1 给rados_create()使用的User ID和给rados_create2()使用的user name,其中后者更受推荐
2 Cephx authentication key
3 Monitor的ID和IP地址
4 日志级别
5 调试级别
所以,从你的app使用集群的步骤如下:1 创建一个cluster handle,它将被用来连接集群;2 使用这个handle来连接集群。为了连接集群,这个app必须提供一个monitor地址,一个用户名,还有一个authentication key。

环境:
*** 作系统均为:CentOS 51
Apache2X服务器一台:IP地址1921682324;安装路径/usr/local/apache;
Tomcat6服务器一台:IP地址1921682325;安装路径/usr/local/tomcat;
Tomcat6服务器一台:IP地址1921682326;安装路径/usr/local/tomcat;

配置:
Apache安装:
#/configure --prefix=/usr/local/apache --enable-modules=so --enable-mods-shared=all --enable-proxy --enable-proxy-connect --enable-proxy-ftp --enable-proxy->1、Spark脚本提交/运行/部署11spark-shell(交互窗口模式)运行Spark-shell需要指向申请资源的standalonespark集群信息,其参数为MASTER,还可以指定executor及driver的内存大小。sudospark-shell--executor-memory5g--driver-memory1g--masterspark://192168180216:7077spark-shell启动完后,可以在交互窗口中输入Scala命令,进行 *** 作,其中spark-shell已经默认生成sc对象,可以用:valuser_rdd1=sctextFile(inputpath,10)读取数据资源等。12spark-shell(脚本运行模式)上面方法需要在交互窗口中一条一条的输入scala程序;将scala程序保存在testscala文件中,可以通过以下命令一次运行该文件中的程序代码:sudospark-shell--executor-memory5g--driver-memory1g--masterspark//192168180216:7077

分布式概念还是简单的吧,主要是理解为什么要分布式,和分布式主要做什么。
首先分布式的主要作用有以下几点:
1、提高应用的可用性:服务器要保持长时间能够有效的使用,但是现实情况又是很不稳定的,例如电脑会死机,会断电,硬件设备会损坏,使用分布式可以一定程度的解决这些问题。
2、分散服务器运行压力,这本身也是提高应用可用性的一个方面,例如你的应用功能很多,逻辑很复杂,或者 *** 作的数据量较大,单个应用或者机器难以甚至无法处理你的业务,那么就需要使用分布式。
分布式的概念其实也很简单,就是一个应用做不了或者难以做的事情,让多个应用去做,这就好比让一个人去完成的事情让多个人去完成,举个现实中很简单的例子,例如造车,造车这个工作本身一个造车厂可以完成这个任务,只是一个工厂造车,成本、技术、人员等等都会提高制作成本,而且因为技术过于驳杂,一个厂能造,但是成本和难度都会增加,但是拆分给多个厂来造车,例如一个厂造发动机,一个厂造底盘,一个厂造外壳,一个厂做电子仪表盘等等,把各个配件分散给不同的厂制作,这样每个厂专心做自己更专业的事情,这样既降低了成本,有提高了工作效率。
回到我们的web应用,一般来说,一个系统就是一个应用,系统里面有各种功能,例如学生信息管理系统,系统里面包含各种功能,例如用户登录和认证、权限配置和授权、学生信息的管理、学生的入学管理、学生的毕业管理、校友信息管理等等各种功能,但是当学生的数量特别多,内部业务逻辑特别复杂的时候,一个应用可能不能够承担起这个系统的正常运转,那么就可以考虑分布式,来使用多个应用完成这个系统的功能,例如做一个应用负责登录认证模块,一个应用处理授权的功能,另外一个应用处理学生信息的内容等等。
总结分布式,其实就是一个应用的事情让多个应用来解决,分布式是应用级别的分工,在一台机器的多个应用,我们叫垂直分布式,在多台机器上的分布式叫水平分布式,在一台机器的分布式实现起来比较简单,只需要实现应用之间的内存数据共享即可,内存数据共享方式很多,可以使用共享文件等等方式,多台机器的分布式就需要借助网络通信来共享数据,如果是通语言同技术的应用,可以直接共享内存数据,如果是不同语言的分布式应用,就需要参照一些通用传输协议的数据,例如xml json。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/12639946.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-27
下一篇 2023-05-27

发表评论

登录后才能评论

评论列表(0条)

保存