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

  而本文的意义在于需求:由于大流量请求,导致服务无法正常响应,在不增加购买机器成本的场景下,如何提高服务器的业务处理能力?提示为:某个服务访问频率比其他服务的访问频率要高很多,服务是用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. 项目详解4—haproxy 反向代理负载均衡

    一.企业服务架构图及负载均衡的要求 1.场景说明 在企业生产环境中,每天会有很多的需求变更,比如增加服务器.新业务上线.url路由修改.域名配置等等,对于前端负载均衡设备来说,容易维护,复杂度低,是首 ...

  2. 千万级高并发负载均衡软件HAproxy

    1负载均衡产品介绍 基于硬件的负载均衡设备例如F5,Big-IP,基于软件的负载均衡产品HAproxy,LVS,nginx在这些软件产品中,又分为基于操作系统的软负载实现和基于第三方应用的软负载实现. ...

  3. 实现基于Haproxy+Keepalived负载均衡高可用架构

    1.项目介绍: 上上期我们实现了keepalived主从高可用集群网站架构,随着公司业务的发展,公司负载均衡服务已经实现四层负载均衡,但业务的复杂程度提升,公司要求把mobile手机站点作为单独的服务 ...

  4. Linux内核——进程管理之SMP负载均衡(基于版本4.x)

    <奔跑吧linux内核>3.3笔记,不足之处还望大家批评指正 根据实际物理属性,CPU域分类如图1所示. 图1 CPU域分类 问题一:一个4核处理器中的每个物理CPU拥有独立L1 cach ...

  5. 基于Apache的Tomcat负载均衡和集群(2)

    反向代理负载均衡 (Apache+JK+Tomcat) 使用代理服务器可以将请求转发给内部的Web服务器,让代理服务器将请求均匀地转发给多台内部Web服务器之一上,从而达到负载均衡的目的.这种代理方式 ...

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

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

  7. 原来,负载均衡可以这样用,多核CPU可以这样用

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

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

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

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

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

随机推荐

  1. Zabbix Agent 源码编译安装

    简介: 单独整理一下 Zabbix Agent . 1.安装包选择 下载地址:http://www.zabbix.com/download.php 这里有两种源码包,一种是安装 Zabbix Serv ...

  2. Spring再接触 注入类型

    共有三种注入类型 一种是set注入 一种是构造注入 一种是接口注入 最常用的还是set 现在看一下construct 构造注入 在userservice中加入 package com.bjsxt.se ...

  3. [leetcode]23. Merge k Sorted Lists归并k个有序链表

    Merge k sorted linked lists and return it as one sorted list. Analyze and describe its complexity. I ...

  4. Swift 反射机制,命名空间

    1. 知道 Swift 中有命名空间        - 在同一命名空间下,全局共享!        - 第三方框架使用 Swift 如果直接拖拽到项目中,从属同一个命名空间,很有可能冲突!       ...

  5. stark组件开发之排序

    class StartHandler(object): .......... ordered_list = [] # 排序规则由 用户指定. def get_ordered_list(self): r ...

  6. tomact的安装配置

    1.到官网下载tomact安装程序包,http://tomcat.apache.org/ 2.下载core下zip版本 (1)tar.gz文件是Linux操作系统下的安装版本 (2)exe文件是Win ...

  7. Elasticsearch tshark 封包分析 (转)

    Elasticsearch tshark 封包分析 使用wireshark能解決許多網路問題,將側錄下來的封包傳至Elasticsearch上方便分析製作及時報表.tshark為wireshark的命 ...

  8. [BeijingWc2008]雷涛的小猫

    --BZOJ1270 Description 雷涛的小猫雷涛同学非常的有爱心,在他的宿舍里,养着一只因为受伤被救助的小猫(当然,这样的行为是违反学生宿舍管理条例的). 在他的照顾下,小猫很快恢复了健康 ...

  9. python_day12_html

    目录: 简单web的服务器代码 html简介 html常用标签 一.简单web的服务器代码 1.简单python服务器代码: import socket def main(): sock = sock ...

  10. 1.6Eigen中系数运算Reductions, visitors and broadcasting

    Eigen::Matrix2d mat; mat<<,, ,; cout<<"矩阵所有系数之和:"<<mat.sum();//1+2+3+4=1 ...