云服务器免费试用

多线服务器(多线服务器的优势)

服务器知识 0 261

本文目录:

  • 1、BGP和多线服务器租用有什么区别
  • 2、简单多线程服务器实现
  • 3、单线服务器和BGP多线服务器有何区别
  • 4、搭建个人网站想租用服务器应该怎么选?
  • 5、服务器租用中单多线有什么区别?

BGP和多线服务器租用有什么区别

了解过服务器的用户都知道,我国线路有南北方的区别,由于不同的运营商采用的技术不同,导致南北数据传输的时候出现不兼容的情况。但是随着互联网的发展企业的业务不在局限于同一地区的客户,如果我们想要更多的客户访问,就需要把网站放到多线机房中,而最好的办法就是在数据中心接入不同的网络供用户使用,这也产生了所谓的多线路数据中心。而BGP多线又是其中比较特俗的一种。

BGP 是唯一一个用来处理像因特网大小的网络的协议,也是唯一能够妥善处理好不相关路由域间的多路连接的协议

BGP机房具有以下优点:

1、服务器只需要设置一个IP地址,最佳访问路由是由网络上的骨干路由器跟双线BGP机房服务器托管据路由跳数与其它技术指标来确定的,不会占用服务器的任何系统资源。服务器的上行路由与下行路由都能选择最优的路径,所以能真正实现高速的单IP高速访问。

2、由于BGP协议本身具有冗余备份、消除环路的特点,所以当IDC服务商有多条BGP互联线路时可以实现路由的相互备份,在一条线路出现故障时路由会自动切换到其它线路。

3、使用BGP协议还可以使网络具有很强的扩展性可以将IDC网络与其他运营商互联,轻松实现单IP多线路,做到所有互联运营商的用户访问都很快。这个是双IP双线无法比拟的。

很多的用户由于业务的需要,想让全国各地的用户快速打开自己要展现给用户的东西,都会选择BGP机房进行服务器托管

双线服务器租用就是通过技术把不同的网络运营商的骨干线路同时接入到互联网数据中心的边界路由器上上,此时该IDC机房便部分或全部的成为该路由器所辖的自治域(AS)。只要托管到该AS域内的服务器或集群便同时接入到多家网络运营商的线路、并分配到相应的IP地址,可以快速响应来自于不同网域接入用户的连接请求,如电信IP响应电信用户请求、网通IP响应网通用户请求等,在一定程度上解决了跨网访问网站时的缓慢、延迟等问题。

非BGP的多线数据中心用户需要在服务期中配置不同网络的网卡以及使用多个IP地址,在交换机等网络辅助设备下进行数据交换以及线路的选择。不过这种技术最大的麻烦再与为用户制造了不少的成本,很多用户为了能在服务器中安装更多的网卡不得不将原有的1U服务器换成2U服务器,而在维护方面单纯的多线服务器一旦发生网络故障,技术人员就要从每一条线路上进行排查维护的过程十分麻烦,所以目前有更多的用户选择使用BGP数据中心。

简单多线程服务器实现

闲来没事 本来是在学习nio框架的 突然发现对最原始的多线程服务器都不是很了解 遂自己写了个简单的例子

package testmutithreadserver old;

import java io IOException;

import ServerSocket;

import Socket;

import testmutithreadserver old threadpool ThreadPool;

/**

  * 简单阻塞式多线程服务器(线程池处理)

  *

  * @author zhangjun

  *

  */

public class Server {

     private int port;

     private ServerSocket serverSocket;

     private ThreadPool threadPool;

     private PortListenThread listener;

     public Server(int port) {

         this port = port;

         threadPool = new ThreadPool();

     }

     public void start() {

         try {

             serverSocket = new ServerSocket(port);

             listener = new PortListenThread();

             listener start();

         } catch (IOException e) {

             e printStackTrace();

         }

     }

     public void shutdown() {

         threadPool shutdown();

         listener finish();

     }

     private class PortListenThread extends Thread {

         private Boolean finish = false;

         @Override

         public void run() {

             while (!finish) {

                 try {

                     final Socket socket = serverSocket accept();

                     threadPool execute(new Runnable() {

                         @Override

                         public void run() {

                             new TestMessage(socket) execute();

                         }

                     });

                 } catch (IOException e) {

                     e printStackTrace();

                 }

             }

         }

         public void finish() {

             finish = true;

         }

     }

     public static void main(String[] args) {

         int port = ;

         System out println( server is listening on port: + port);

         new Server(port) start();

     }

}

这个Server调用的是自己实现的一个基于任务队列的简单线程池

package testmutithreadserver old threadpool;

import java util LinkedList;

/**

  * 简单线程池 (基于工作队列的同步线程池)

  *

  * @author zhangjun

  *

  */

public class ThreadPool extends ThreadGroup {

     private final static String THREADPOOL = thread pool ;

     private final static String WORKTHREAD = work thread ;

     private final static int DEFAULTSIZE = Runtime getRuntime()

             availableProcessors() + ;

     private LinkedListRunnable taskQueue;

     private boolean isPoolClose = false;

     public ThreadPool() {

         this(DEFAULTSIZE);

     }

     public ThreadPool(int size) {

         super(THREADPOOL);

         setDaemon(true);

         taskQueue = new LinkedListRunnable();

         initWorkThread(size);

     }

     private void initWorkThread(int size) {

         for (int i = ; i size; i++) {

             new WorkThread(WORKTHREAD + i) start();

         }

         try {

             Thread sleep( * size);

         } catch (InterruptedException e) {

         }

     }

     public synchronized void execute(Runnable task) {

         if (isPoolClose) {

             throw new IllegalStateException();

         }

         if (task != null) {

             taskQueue add(task);

             notify();

         }

     }

     private synchronized Runnable getTask() throws InterruptedException {

         if (taskQueue size() == ) {

             if (isPoolClose) {

                 return null;

             }

             wait();

         }

         if (taskQueue size() == ) {

             return null;

         }

         return taskQueue removeFirst();

     }

     public void shutdown() {

         waitFinish();

         synchronized (this) {

             isPoolClose = true;

             interrupt();

             taskQueue clear();

         }

     }

     private void waitFinish() {

         synchronized (this) {

             isPoolClose = true;

             notifyAll();

         }

         Thread[] threads = new Thread[activeCount()];

         enumerate(threads);

         try {

             for (Thread t : threads) {

                 t join();

             }

         } catch (InterruptedException e) {

             //swallow this

         }

     }

     private class WorkThread extends Thread {

         public WorkThread(String name) {

             super(ThreadPool this name);

         }

         @Override

         public void run() {

             while (!isInterrupted()) {

                 Runnable task = null;

                 try {

                     task = getTask();

                 } catch (InterruptedException e) {

                     //swallow this

                 }

                 if (task == null) {

                     return;

                 }

                 try {

                     task run();

                 } catch (Throwable e) {

                     e printStackTrace();

                 }

             }

         }

     }

}

当然也可以直接使用concurrent的线程池 代码几乎不用改变

package testncurrent;

import java io IOException;

import ServerSocket;

import Socket;

import ncurrent ExecutorService;

import ncurrent Executors;

import testmutithreadserver old TestMessage;

/**

  * 简单阻塞式多线程服务器(线程池处理)

  *

  * @author zhangjun

  *

  */

public class Server {

     private int port;

     private ServerSocket serverSocket;

     private ExecutorService threadPool;

     private PortListenThread listener;

     public Server(int port) {

         this port = port;

         threadPool = Executors newFixedThreadPool( );

     }

     public void start() {

         try {

             serverSocket = new ServerSocket(port);

             listener = new PortListenThread();

             listener start();

         } catch (IOException e) {

             e printStackTrace();

         }

     }

     public void shutdown() {

         threadPool shutdown();

         listener finish();

     }

     private class PortListenThread extends Thread {

         private Boolean finish = false;

         @Override

         public void run() {

             while (!finish) {

                 try {

                     final Socket socket = serverSocket accept();

                     threadPool execute(new Runnable() {

                         @Override

                         public void run() {

                             new TestMessage(socket) execute();

                         }

                     });

                 } catch (IOException e) {

                     e printStackTrace();

                 }

             }

         }

         public void finish() {

             finish = true;

         }

     }

     public static void main(String[] args) {

         int port = ;

         System out println( server is listening on port: + port);

         new Server(port) start();

     }

}

里边我构造了一个Message接口

package testmutithreadserver old;

/**

  * 通用消息接口

  *

  * @author zhangjun

  *

  */

public interface Message {

     void execute();

}

以及实现了一个测试消息类

package testmutithreadserver old;

import java io BufferedReader;

import java io IOException;

import java io InputStreamReader;

import java io PrintWriter;

import Socket;

/**

  * 测试消息

  *

  * @author zhangjun

  *

  */

public class TestMessage implements Message {

     private Socket socket;

     public TestMessage(Socket socket) {

         this socket = socket;

     }

     @Override

     public void execute() {

         try {

             BufferedReader in = new BufferedReader(new InputStreamReader(socket

                     getInputStream()));

             PrintWriter out = new PrintWriter(socket getOutputStream() true);

             String s;

             while ((s = in readLine()) != null) {

                 System out println( received message: + s);

                 if (s equals( quit )) {

                     break;

                 }

                 out println( hello + s);

             }

         } catch (IOException e) {

             e printStackTrace();

         } finally {

             try {

                 if (!socket isClosed()) {

                     socket close();

                 }

             } catch (IOException e) {

             }

         }

     }

}

lishixinzhi/Article/program/Java/gj/201311/27312

单线服务器和BGP多线服务器有何区别

单线服务器和BGP多线服务器有何区别?磐石云来讲讲,首先我们先了解它们的各自含义是什么,再去比较一下它们的优缺点。

单线:

通常指电信单线路或联通单线路或移动单线路(单网卡单IP)。

单线服务器就是指这个IDC机房要么是联通线路接入,要么是电信线路接入,要么就是移动线路接入,相互之间跨运营商访问效果比较差。

BGP线路服务器:

采用BGP方案来实现电信/联通/移动 多线路互联的机房,我们称为BGP机房。

它们有什么优劣势?

单线 vs BGP

单线优势就是大带宽成本低,机房出口带宽充足。反过来BGP的优势就是单线机房的劣势,最忍受不了的就是晚上、节假日机器故障维护问题,慢的要死,当然这种情况只是机房带宽不充足的情况下,带宽充足还是比较稳定的。

如果你的用户群体比较集中,流量非常大,比如基本都是北方用户或者某一个城市,可以考虑放在单线机房,便宜省钱。小型网站平台可以考虑单线+CDN,这是个不错的选择。

如果业务是服务全国用户或者当地电信联通市场占比各半,流量在百兆以内就放在BGP多线,速度快,服务器有保障。

BGP服务器有哪些优劣势:

首先,BGP机房实现了不同运营商能共用同一IP的目标,并且保证了各服务商都能以最快的速度接入网络。

BGP机房中的单IP双线路的BGP协议,是实现运营商同Ip而达到接入最高速的核心设计,主要由一条线路的IP映射到另一线路的IP上,再借助程序自动为运营商选择最快的线路,以达到合理的分流。

运营商通过这样的途径不仅可以选择到最佳的访问途径、达到最高的访问速度,并且还不占用服务器的任何资源。

不好的地方就是BGP线路贵,同样的机器和带宽比单线高出很多,带宽越大比例越大,一般用千兆以上带宽的公司基本没有用BGP多线的。

该选择哪一个?

每一种线路各有优缺点。

至于选择什么路线,你们看完以上分析后会有个自我判断,不管怎么样,无论选择哪种,都必须以业务需求发展的角度去选择。

搭建个人网站想租用服务器应该怎么选?

网站租用服务器主要考虑几个方面:

一、服务器的配置与带宽,要根据网站的类型与规模来选择,如果是新建的网站,前期其实可以不用服务器,用云主机也一样能满足,但因为部分类型的网站对带宽的需求较高,比如说视频下载类的网站,建议选择带宽较为充足的独立服务器。

二、服务器线路问题,如果网站是面向电信用户为主,可选择租用电信服务器,如果以联通为主,则租用联通服务器,如果网站是面向全国各地都有,可以选择用多线服务器。∞这样能更好的保障用户访问速度。

三、选择靠谱的IDC服务商,资质齐全,经营时间长,有自己核心资源和服务团队,选择这样的服务商合作,无论是网络质量还是后期维护各方面都更放心。

我给你推荐酷酷云,还有24小时售后客户,出现什么问题都能及时解决才能使网站更稳定。

服务器租用中单多线有什么区别?

在未来疫情防控常态化的情况下,以数据为依据的见解将有助企业更好地重新构想现代化工作场所,随着企业适应并从危机中恢复,客户在咨询云主机租用时,客服都会根据客户的网站需求,未来发展向客户介绍合适的机器、机房以及宽带走的线路。很多客户对这些并不十分了解,那么,在服务器租用中,单线与多线有什么区别?

服务器的线路有分为单线线路、多线线路,网站建设用户可以根据网站需求、网站类型、网站规模等选择不同的线路,应该怎么理解服务器租用中的单线与多线呢?

1、多线服务器所谓的多线机房实际是一个机房有电信和联通移动的多条线路接入。通过多线机房内部路由器设置、BGP自动路由的分析,实现电信用户访问电信线路,移动用户访问移动线路,这样实现电信联通均可以快速访问,有效的解决了中国南北网络不互通的弊病。

2、单线服务器所谓的单线服务器是指只有电信或者联通一条线路接入,如电信线路、联通线路、移动线路等。对于针对地方性的网站可以选择单线线路,如企业网站的用户主要集中在南方可以选择电信服务器租用;用户集中在北方可以选择联通服务器;如果网站是针对全国用户的商城网站或者门户网站可以选择双线服务器,双线服务器能够解决南北线路不能互通的弊端,保障了各个地区的访问速度。

T网科技拥有专业的服务器资源,专业的线路供您选择,我们用较优的态度,让您得到较满意的服务!

【多线服务器】的内容来源于互联网,如引用不当,请联系我们修改。

声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942@qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: 多线服务器(多线服务器的优势)
本文地址: https://solustack.com/29057.html

相关推荐:

网友留言:

我要评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。