负载均衡作为一个处理高并发,大流量的访问的业务场景,已经几乎是常识性的知识了。

  而本文的意义在于需求:由于大流量请求,导致服务无法正常响应,在不增加购买机器成本的场景下,如何提高服务器的业务处理能力?提示为:某个服务访问频率比其他服务的访问频率要高很多,服务是用JAVA语言编写的。

  一般情况下,我们有两种可供选择的负载均衡方式,一是买别人的服务,别人给你提供好,你只需界面上操作下就行了;二是自己搭建负载均衡服务。当然了,这个层面的分类是会被喷的。咱们说点先靠谱的。

  负载均衡分为软件负载均衡和硬件负载均衡; 百度百科解释如下: 软件负载均衡解决方案是指在一台或多台服务器相应的操作系统上安装一个或多个附加软件来实现负载均衡,如DNS Load Balance,CheckPoint Firewall-1 ConnectControl等,它的优点是基于特定环境,配置简单,使用灵活,成本低廉,可以满足一般的负载均衡需求。  硬件负载均衡解决方案是直接在服务器和外部网络间安装负载均衡设备,这种设备通常称之为负载均衡器,由于专门的设备完成专门的任务,独立于操作系统,整体性能得到大量提高,加上多样化的负载均衡策略,智能化的流量管理,可达到最佳的负载均衡需求。

  说得再多,其实也就是用后面许多机器支撑起前端的大流量请求。也就是说,在这种场景下,只要你足够有钱,哪怕你一台机器只能处理1、2个并发,那么你通过购买足够多的机器,也是可以应对大流量问题的。 

  回到本文的出发点,怎样在不增加后端机器的情况下,提高业务处理能力呢?两个解决方向:

1. 某个服务访问量远高于其他服务,那么,我就让这个高访问的服务能够访问到比普通服务更多的机器,这样就可以分配更多资源给该服务了。

2. 利用多核CPU,让每台机器能够提供N个服务出来,这样就变相增加了机器的数量,也不至于购买新机器。

3. 组合1&2,更好提供服务。

  要想让某服务能够拥有更多的服务器资源,这就涉及到了负载均衡的权重问题和路由问题了。如下为Nginx的配置示例:

server {
listen ;
server_name admin..com; location /func1 {
proxy_pass http://k1;
proxy_set_header Host $host; #域名转发
proxy_redirect off;
proxy_set_header X-Real-IP $remote_addr; #IP转发
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_connect_timeout ;
proxy_read_timeout ;
proxy_send_timeout ;
} location /func2 {
proxy_pass http://k2;
proxy_set_header Host $host; #域名转发
proxy_redirect off;
proxy_set_header X-Real-IP $remote_addr; #IP转发
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_connect_timeout ;
proxy_read_timeout ;
proxy_send_timeout ;
}
} #nginx 负载均衡配置权重,解决访问概率问题,fun1配置3台机器,fun2配置1台机器
upstream k1{
server 10.136.82.92: weight=;
server 10.136.82.93: weight=;
server 10.136.82.94: weight=;
} upstream k2{
server 10.136.82.93: weight=;
}

  OK,分配概率问题处理了,咱们来看看怎样在一台机器上提供出更多的服务出来。

  就如本文标题据说,多核CPU,是目前的服务器绝对配置,目前可以说单核的机器已经找不到了吧。那么,怎样利用这个资源呢? Java其实是可以自动利用多核资源的,那就是通过多线程去处理业务,这时代码运行就会被随机分配到其他核心处理器去处理了。但是对于不利用多线程编程的情况,多核的资源可能就被浪费了。  那么,怎样直接利用多核资源呢? 当然就是在每个核心上面启动一个新服务咯。

  在每个核心上启动一个服务如Tomcat,方式有多种,如:

1. 复制项目到代码,更改端口,如server -> server1 -> server2,直接指定核心启动

taskset -c  ./tomcat7 start       #直接指定核心启动,当然了,这样是无法利用到多核的
taskset -pc #为进程单独指定核心运行,如为8081->,-> ...

2. 使用docker容器,在一台机器上创建N个docker容器,然后将war/jar的项目代码安装其中,然后向外部暴露一个商品映射到docker内部的8080端口即可。

docker run -it  -d -p 40: con_server1 /bin/bash   # 创建一个容器,端口映射
docker start con_server1 # 启动容器
docker exec -it con_server1 # 进入容器1

  运行好多个实例后,再通过负载均衡分配权重即可。

  至此,多核利用完毕。针对实际应用中,可能不会这么麻烦的去操作,但是也算是一种思路吧,还有就是硬件负载均衡的配置应该会更简单些吧,毕竟是花了钱的。如下是A10负载均衡器的介绍图,就当是位符吧。

  目前很多实际问题,都不能只从代码层面去考虑了,但是我们能做的,还是把代码写好一点,然后去了解下服务器的大环境。

  这样吹牛会不会好点,哈哈哈。。。

原来,负载均衡可以这样用,多核CPU可以这样用的更多相关文章

  1. Nginx系列一:正向代理和反向代理、Nginx工作原理、Nginx常用命令和升级、搭建Nginx负载均衡

    转自https://www.cnblogs.com/leeSmall/p/9351343.html 仅供个人学习 一.什么是正向代理.什么是反向代理 1. 正向代理,意思是一个位于客户端和原始服务器( ...

  2. 记录一个多核CPU负载不均衡问题(动态绑定进程到指定cpu:taskset -pc $CPU $PID)

    昨晚和一位读者朋友讨论了一个问题:在一台多核 CPU 的 Web 服务器上,存在负载不均衡问题,其中 CPU0 的负载明显高于其它 CPUx,进一步调查表明 PHP-FPM 的嫌疑很大.话说以前我曾经 ...

  3. 多核CPU配合负载均衡可以这样用,为老板省点钱

    负载均衡作为一个处理高并发,大流量的访问的业务场景,已经几乎是常识性的知识了. 而本文的意义在于需求:由于大流量请求,导致服务无法正常响应,在不增加购买机器成本的场景下,如何提高服务器的业务处理能力? ...

  4. LINUX内核CPU负载均衡机制【转】

    转自:http://oenhan.com/cpu-load-balance 还是神奇的进程调度问题引发的,参看Linux进程组调度机制分析,组调度机制是看清楚了,发现在重启过程中,很多内核调用栈阻塞在 ...

  5. linux多核cpu下的负载查看

    linux下使用top命令或uptime命令 单核cpu下,负载超过0.7即意味着瓶颈,多核cpu下按核数*0.7计算负载 如2核,1.4可能即意味着负载较吃力了 查看核数 grep 'model n ...

  6. 多事之秋-最近在阿里云上遇到的问题:负载均衡失灵、服务器 CPU 100%、被 DDoS 攻击

    昨天 22:00~22:30 左右与 23:30~00:30 左右,有1台服役多年的阿里云负载均衡突然失灵,造成通过这台负载均衡访问博客站点的用户遭遇 502, 503, 504 ,由此给您带来麻烦, ...

  7. nginx+ISS 负载均衡 快速入门

    第一:下载 http://pan.baidu.com/s/1dDwapbF 或者官网 http://nginx.org/en/download.html 启动服务: 直接运行nginx.exe,缺点控 ...

  8. paip.提升性能--多核cpu中的java/.net/php/c++编程

    paip.提升性能--多核cpu中的java/.net/php/c++编程 作者Attilax  艾龙,  EMAIL:1466519819@qq.com  来源:attilax的专栏 地址:http ...

  9. 烂泥:高负载均衡学习haproxy之安装与配置

    本文由秀依林枫提供友情赞助,首发于烂泥行天下 有关高负载均衡的软件,目前使用比较多的是haproxy.nginx和lvs.下面我们就开始学习haprxoy这款软件. 一.haproxy介绍 以下开始介 ...

随机推荐

  1. Win环境下Oracle小数据量数据库的物理备份

    Win环境下Oracle小数据量数据库的物理备份 环境:Windows + Oracle 单实例 数据量:小于20G 重点:需要规划好备份的路径,建议备份文件和数据库文件分别存在不同的存储上. 1.开 ...

  2. JS实现悬浮导航的制作--web前端

    思想:导航在这里只有两种状态,一种是初始状态.一种是固定布局状态.实现悬浮导航其实就是通过Javascript脚本语言控制导航的两种状态,主要是对两种状态成立条件的判断,明确了这些,实现起来就不会太难 ...

  3. js 数组里求最大值和最小值

    // 数组里相邻两个数做比较 取满足条件的那个(以此类推) var arr = [1,3,4,5,6,7]; function Max(array){ var max = array[0]; for( ...

  4. java封装性、继承性及关键字

    方法的参数传递(重点.难点)1.形参:方法声明时,方法小括号内的参数   实参:调用方法时,实际传入的参数的值 2.规则:java中的参数传递机制:值传递机制 1)形参是基本数据类型的:将实参的值传递 ...

  5. Dubbo Data length too large: 11557050, max payload: 8388608 传输数据超限

    com.alibaba.dubbo.remoting.transport.AbstractCodec.checkPayload() ERROR Data length too large: 11557 ...

  6. thinkphp 3.2 发送邮件(Phpmailer)

    1.在该模板下Conmon模块函数公共目录新建一个function.php <?php function Sendemail(){ vendor('PHPMailer.class#phpmail ...

  7. (转)Spring注解完成Bean的定义

    使用Spring注解完成Bean的定义 2010-04-21 16:48:54|  分类: spring|举报|字号 订阅     下载LOFTER客户端     通过@Autowired或@Reso ...

  8. Objective-C 使用核心动画CAAnimation实现动画

    先来看看效果吧 整个核心动画就不多做介绍了,随便一搜就能有很多很详细的解释,主要使用以下四种 CABasicAnimation //经典动画 CAKeyframeAnimation //关键帧动画 C ...

  9. 使用Fiddler调试手机端页面请求/抓包

    简介 Fiddler作为一个强大的抓包工具,也是非常强大的http(s)协议分析工具,我们通常用它跟踪请求,PC端使用这里暂不做介绍(这里前提是熟悉PC端的使用),使用很简单. 那么我们如何来用它来跟 ...

  10. Java操作Excel和Word

    这是一个URL它提供了Java项目所推荐的处理此项目所用的类库 http://www.oschina.net/project/tag/258/excel-tools?company=0&sor ...