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

简介:

作者:林昊

virtual

 

如今服务器的配置越来越高端,对于Java应用而言,通常很难充分利用物理机资源,这其实并不是说Java本身没法做到用那么多的资源,而是因为通常Java是用于实现应用,应用很多的情况下对内存、cpu的需求都不会太高,这就使得我们需要有一些办法来充分提升机器的资源使用,虚拟化就是其中一种常用的方法。

 

虚拟化简单来说就是把一台物理机虚拟为N台机器,对于使用者而言通常会觉得虚拟机和一台单独的机器没什么区别。

 

对于服务器的虚拟化而言,具体关于实现虚拟化的技术像PV/FV等这些就不在这里讲了,感兴趣的同学可以自行google。

 

用来实现服务器虚拟化中比较好的产品是xen,xen的成熟度很高,易操作比较稳定性不错,用xen可以很简单的在一台物理机上创建N个虚拟机。

CPU的话为每个虚拟机分配的其实都是virtual的,也就是多个虚拟机可能共用一个CPU,这也是为什么有些虚拟机上会看到%st这个指标是有值的,这个值表示的就是多个虚拟机共用一个CPU的时候,被其他虚拟机用掉的CPU,对于一些敏感的场景,可通过绑定CPU的方式来做到隔离,避免互相影响,但相对来说这样的利用率就不能发挥错峰填谷了,在运行过程中可通过xen的管理工具来动态的调整cpu的绑定,创建的虚拟机的cpu core数只能在在设定的最大cpu个数范围内调整。

 

从上面可以看到,可以认为CPU不是一台机器能创建的xen虚拟机的瓶颈因素,瓶颈因素为内存,xen比较难实现内存的共享,所以在创建了虚拟机后,分配给它的内存就占用了,要实现共享的话会对虚拟机的性能有一定的影响,所以通常来说一般是不会开启的,从这可以看到,如果对于cpu利用不多但内存用的比较多的场景而言,xen虚拟化能提供的帮助是有限的。

 

磁盘/网络的IO通常是不做隔离的,也就是所有的虚拟机共用,这也是为什么有些时候大家会碰到io hang住后物理机上所有的虚拟机全都受影响,通常可做的是限制磁盘的容量、网络的流量。

 

目前的虚拟化技术已经非常成熟,对比虚拟机的性能和直接在物理机上跑的性能,差距也很小(通常看到差距比较大是因为物理机上跑的虚拟机比较多),当然,这还和虚拟机上跑的应用类型有关。

 

对于较多机器的情况下,怎么合理的规划虚拟化,其实是个比较复杂的话题,例如虚拟比到底为多少、虚拟机的ip怎么设计、物理机/虚拟机挂了的情况下怎么处理等等,这些话题就不在这里展开讲了。

 

除了Xen以外,其实还有很多其他的方案,其中现在用的比较多的还有KVM、LXC,KVM的话在GAE上有使用,LXC比较特殊,所以在这里还是稍微讲下。

 

LXC相对Xen/KVM而言,其实不能算是完整的虚拟化,LXC其实就是物理机上的一个进程,只支持linux,所以创建出来的虚拟机是没有独立的os的,但可以用独立的用户体系、ip等,官方的LXC版本创建出来的虚拟机,登录进去后看到的物理资源等都是物理机的,如果要让它想一个真正的虚拟机,需要从内核层面做一些改造,LXC带来的好处是可以动态的调整cpu的搭配、个数,并且内存超配也是ok的,这样对于一些场景而言利用率的提升就比较明显了,感兴趣的同学可以去搜下我以前在QCon上讲过的一个T4的产品,是基于LXC的。

 

提升利用率是个比较大的话题,虚拟化是其中的一个技术点,但涉及的点其实还有很多,Google Borg是提升利用率中“神”级的产品,但目前资料非常少,感兴趣的可以看下我之前写过的一篇我猜测的Borg

 

随着硬件的不断发展,之后的PC Server的配置将会比现在高很多,到了那个时候,如何提升机器利用率就是个更复杂的话题,一台物理机上跑的虚拟机太多的话也不太适合,主要的是物理机挂了影响会比较明显,因此如何在虚拟比到达上限的情况下有效的提升利用率会是再过几年要面临的大话题。

 

相关文章
|
2月前
|
Java 程序员
JAVA程序员的进阶之路:掌握URL与URLConnection,轻松玩转网络资源!
在Java编程中,网络资源的获取与处理至关重要。本文介绍了如何使用URL与URLConnection高效、准确地获取网络资源。首先,通过`java.net.URL`类定位网络资源;其次,利用`URLConnection`类实现资源的读取与写入。文章还提供了最佳实践,包括异常处理、连接池、超时设置和请求头与响应头的合理配置,帮助Java程序员提升技能,应对复杂网络编程场景。
75 9
|
2月前
|
监控 Java API
如何使用Java语言快速开发一套智慧工地系统
使用Java开发智慧工地系统,采用Spring Cloud微服务架构和前后端分离设计,结合MySQL、MongoDB数据库及RESTful API,集成人脸识别、视频监控、设备与环境监测等功能模块,运用Spark/Flink处理大数据,ECharts/AntV G2实现数据可视化,确保系统安全与性能,采用敏捷开发模式,提供详尽文档与用户培训,支持云部署与容器化管理,快速构建高效、灵活的智慧工地解决方案。
|
2月前
|
设计模式 消息中间件 搜索推荐
Java 设计模式——观察者模式:从优衣库不使用新疆棉事件看系统的动态响应
【11月更文挑战第17天】观察者模式是一种行为设计模式,定义了一对多的依赖关系,使多个观察者对象能直接监听并响应某一主题对象的状态变化。本文介绍了观察者模式的基本概念、商业系统中的应用实例,如优衣库事件中各相关方的动态响应,以及模式的优势和实际系统设计中的应用建议,包括事件驱动架构和消息队列的使用。
|
2月前
|
SQL 存储 Java
面向 Java 程序员的 SQLite 替代品
SQLite 是轻量级数据库,适用于小微型应用,但其对外部数据源支持较弱、无存储过程等问题影响了开发效率。esProc SPL 是一个纯 Java 开发的免费开源工具,支持标准 JDBC 接口,提供丰富的数据源访问、强大的流程控制和高效的数据处理能力,尤其适合 Java 和安卓开发。SPL 代码简洁易懂,支持热切换,可大幅提高开发效率。
|
2月前
|
运维 自然语言处理 供应链
Java云HIS医院管理系统源码 病案管理、医保业务、门诊、住院、电子病历编辑器
通过门诊的申请,或者直接住院登记,通过”护士工作站“分配患者,完成后,进入医生患者列表,医生对应开具”长期医嘱“和”临时医嘱“,并在电子病历中,记录病情。病人出院时,停止长期医嘱,开具出院医嘱。进入出院审核,审核医嘱与住院通过后,病人结清缴费,完成出院。
126 4
|
2月前
|
SQL Java 程序员
倍增 Java 程序员的开发效率
应用计算困境:Java 作为主流开发语言,在数据处理方面存在复杂度高的问题,而 SQL 虽然简洁但受限于数据库架构。SPL(Structured Process Language)是一种纯 Java 开发的数据处理语言,结合了 Java 的架构灵活性和 SQL 的简洁性。SPL 提供简洁的语法、完善的计算能力、高效的 IDE、大数据支持、与 Java 应用无缝集成以及开放性和热切换特性,能够大幅提升开发效率和性能。
|
2月前
|
Java 数据库连接 数据库
深入探讨Java连接池技术如何通过复用数据库连接、减少连接建立和断开的开销,从而显著提升系统性能
在Java应用开发中,数据库操作常成为性能瓶颈。本文通过问题解答形式,深入探讨Java连接池技术如何通过复用数据库连接、减少连接建立和断开的开销,从而显著提升系统性能。文章介绍了连接池的优势、选择和使用方法,以及优化配置的技巧。
51 1
|
3月前
|
IDE Java 程序员
C++ 程序员的 Java 指南
一个 C++ 程序员自己总结的 Java 学习中应该注意的点。
27 5
|
2月前
|
JavaScript Java 项目管理
Java毕设学习 基于SpringBoot + Vue 的医院管理系统 持续给大家寻找Java毕设学习项目(附源码)
基于SpringBoot + Vue的医院管理系统,涵盖医院、患者、挂号、药物、检查、病床、排班管理和数据分析等功能。开发工具为IDEA和HBuilder X,环境需配置jdk8、Node.js14、MySQL8。文末提供源码下载链接。
|
3月前
|
移动开发 前端开发 JavaScript
java家政系统成品源码的关键特点和技术应用
家政系统成品源码是已开发完成的家政服务管理软件,支持用户注册、登录、管理个人资料,家政人员信息管理,服务项目分类,订单与预约管理,支付集成,评价与反馈,地图定位等功能。适用于各种规模的家政服务公司,采用uniapp、SpringBoot、MySQL等技术栈,确保高效管理和优质用户体验。
下一篇
开通oss服务