Java程序员也应该知道的系统知识系列之全局体系

作者:林昊

 

Java程序部署到服务器上后,要被外部用户访问到,还需要一系列的东西组成,这些东西也是需要了解的。

 

外部用户要访问,通常来说都会给个域名,有域名就意味着需要DNS,一般来说域名注册商都会提供域名解析服务,当然,也有外部的一些域名解析提供商,例如著名的dnspod。

 

域名需要解析为一个公网的ip,互联网公司会借助这个机会来根据用户访问的ip来解析为一个更靠近用户的公网ip(这个通常需要采用商用的GSLB设备来实现),从而提升用户的访问速度,也就是很多人都听说过的CDN,不过这主要用于静态资源,例如图片、js、css文件等,这一层的技术难点是如何选择一个对用户而言访问速度最快的节点(例如最近距离的一个挂了,最近的节点负载高等),在中国的网络环境下就更复杂了。

对于动态类的资源的访问,通常就会访问到某个或某几个机房,这些通常就是在DNS上绑定多个公网ip,而访问公网ip要能最后落到实际的服务器上,通常会需要经过LB(load balance)设备,这个可以是硬件的,也可以是软件的,软件的目前来说实现和维护的成本还是比较高的,硬件的话则是本身价格比较昂贵,所以可以根据公司发展的阶段来选择,LB设备上的每个VIP下可以挂载一堆的服务器,由LB设备来负责选址以及failover的处理。

 

经过上面的过程,用户的请求才能落到实际的服务器上,而对于Java应用来说,各种应用服务器例如jboss、tomcat等直接暴露对外的话,支撑连接的能力会不够(主要原因是这些应用服务器之前都是bio的模式),另外也是这些应用服务器在实现的时候对于诸如慢连接等的防攻击能力很弱,所以通常来说在应用服务器前面还会搭一层nginx/apache等,所以通常这个时候会先落到nginx/apache上,然后由nginx/apache再转发到相应的服务器。

 

经过上面的阶段,用户的请求才终于进入到了Java程序中处理了。

 

从上面整个过程可以看到,要确定Java应用能够支撑的量,需要全盘了解,DNS部分的解析能力、LB设备的支撑能力、CDN的流量、Nginx/Apache的支撑能力,同样,稳定性也需要全盘了解。

 

整个Java程序员也应该知道的系统知识系列到此就结束了,讲的并不深入,感兴趣的同学可以根据涉及的点进一步的去了解更深入的内容,更多的是希望大家能通过这个系列的文章来知道对于一个生产环境中运行的Java程序,要做好稳定性保障、性能优化等,仅仅是知道Java代码本身是不够的。

 

时间: 2024-11-15 22:18:45

Java程序员也应该知道的系统知识系列之全局体系的相关文章

Java程序员也应该知道的系统知识系列之内存

作者:林昊 上篇说到了Java程序和CPU的关系,对于多数实现的较好的Java应用程序而言,基本上随着CPU的核数增加或能力提升,系统能够支撑的并发量就可以稳步上升,但对于内存而言,是否也是这样呢,这篇我们就来看看Java程序和内存的关系.   和CPU一样,我们首先要知道机器上的内存的硬件状况,在linux下,可以通过dmidecode | grep -A16 "Memory Device$"命令来查看机器插了多少根内存条,以及每根内存条的具体型号,内存条的具体型号对Java应用的运

Java程序员也应该知道的系统知识系列之磁盘

作者:林昊 除了CPU.内存这两个最重要的也是看起来和应用性能最为相关的硬件外,磁盘也是一个非常重要的部件,尤其是IO压力比较大的存储类的系统,磁盘是一个慢速设备,所以如果使用不当,会导致应用性能受到很大的影响.   首先我们需要知道运行的机器上的磁盘的状况,可以通过执行cat /proc/scsi/scsi来查看,例如: Attached devices: Host: scsi0 Channel: 01 Id: 00 Lun: 00 Vendor: SEAGATE Model: ST33006

Java程序员也应该知道的系统知识系列之CPU

作者:林昊 去年在排查很多java应用的问题时候,看到一些现象是程序员对自己写完的程序所运行的环境了解很少,导致排查问题的时候会比较折腾,因此想到了写这个系列的文章,程序要提供功能给最终用户使用,代码只是其中的一个部分,它还需要依赖jvm.os.服务器硬件.网络.负载均衡等等来共同完成,在这个系列的文章中,将重点关注除jvm外的几个部分,更多的也只是一个科普作用,由于os我使用的都是linux,这个系列的文章中讲到的os也都默认就是linux,这是这个系列的第一篇:CPU.   Java程序在运

Java程序员也应该知道的系统知识系列之网卡

作者:林昊 对于编写分布式Java应用的同学而言,网卡的一些知识也是必须掌握的,例如什么是网卡的bonding模式,网卡的中断处理,os相关的参数等.   机器上网卡的型号可通过lspci | grep -i ether来查看,同样在看到网卡的型号后可通过google了解下网卡的状况,对于Java应用而言,主要需要关注的是网卡是否支持多队列,这个可以通过lspci -vvv | grep -i msi-x来查看网卡是否支持多队列,以及支持多少个队列,具体多队列的作用后面讲. 机器上网卡的bond

Java程序员也应该知道的系统知识系列之虚拟化

作者:林昊   如今服务器的配置越来越高端,对于Java应用而言,通常很难充分利用物理机资源,这其实并不是说Java本身没法做到用那么多的资源,而是因为通常Java是用于实现应用,应用很多的情况下对内存.cpu的需求都不会太高,这就使得我们需要有一些办法来充分提升机器的资源使用,虚拟化就是其中一种常用的方法.   虚拟化简单来说就是把一台物理机虚拟为N台机器,对于使用者而言通常会觉得虚拟机和一台单独的机器没什么区别.   对于服务器的虚拟化而言,具体关于实现虚拟化的技术像PV/FV等这些就不在这

Java程序员需要哪些AIX、Solaris知识

问题描述 在很多的招聘网站上都会看到有要求AIX.Solaris经验的:还有的要求WebLogic.WebSphere经验:有的甚至要求开发工具最好熟悉BEA的workshop:我想向前辈们问一下:对于一个Java程序员,AIX.Solaris需要了解到什么程度?我对Linux很熟练,不管是用Linux作为开发环境,还是在Linux上做Tomcat.JBoss一类的部署都没问题:但是AIX.和Solaris目录结构和管理方式都不太一样:还有WebLogic和WebSphere在什么样的场合.系统

JAVA程序员面试32问 选择自 liujun999999 的 Blog (本人做收藏)

程序|程序员 第一,谈谈final, finally, finalize的区别. 第二,Anonymous Inner Class (匿名内部类) 是否可以extends(继承)其它类,是否可以implements(实现)interface(接口)? 第三,Static Nested Class 和 Inner Class的不同,说得越多越好(面试题有的很笼统). 第四,&和&&的区别. 第五,HashMap和Hashtable的区别. 第六,Collection 和 Collec

Java程序员面试题集(86-115)

Java程序员面试题集(86-115) 摘要:下面的内容包括Struts 2和Hibernate的常见面试题,虽然Struts 2在2013年6月曝出高危漏洞后已经显得江河日下,而Spring MVC的异军突起更加加速了Struts 2的陨落,但面试中仍然有可能被问及和此框架相关的内容,毕竟Struts 2曾经被阿里巴巴.京东以及政府企业门户网站广泛采用.另一方面,Hibernate目前仍然是ORM框架中的中坚力量,MyBatis在此领域也有不容忽视的一席之地,因此了解这两个ORM框架对Java

JAVA程序员必读:基础篇(8)

程序|程序员 JAVA程序员必读:基础篇时间:2001/09/13 13:31 作者:ZSC 太平洋网络学院 2.6什么是接口 接口是一个收集方法和常数表单的契约.当类执行一个接口,它就许诺声明在那个接口中执行所有的方法. 接口是一个设备或者一个系统,它是用于交互的无关的实体.根据这个定义,远程控制是一个在你和电视的接口:而英语是两个人之间的接口:强制在军事中的行为协议是不同等价人之间的接口.在JAVA语言中,接口是一个设备,它是用来与其它对象交互的设备.一个接口可能对一个协议是类似的.实际上,