精华内容
下载资源
问答
  • 中心服务器是什么
    千次阅读
    2014-02-17 20:05:41

    中心服务器是连接其他服务器并控制其他服务器的中心枢纽。


    设计上:

    (1)控制消息转发流程

    (1-1)中心服务器的全局连接管理器管理其他服务器连接到中心服务器的连接 (g_center_session_manager)。

    (1-2)登录连接管理器管理连接到登录服务器的会话。

    (1-3)gm连接管理器管理连接到gm服务器的会话。

    (2)其他服务器启动控制

    根据服务器表来控制其他服务器启动依赖关系。动态服务器需要等待静态服务器启动了才能启动。

    (3)登录流程控制

    (3-1)登录临时会话管理器管理临时登陆会话。

      (3-2)加入登录临时会话到登录管理器。如果已有该登录会话(表示同一连接正在登录中),并且中心角色在线,那么发送强行存档到网关。

    (3-3)登录成功就添加账号到中心服务器(适用于账号与角色一一对应的情况)。如果该玩家已登录就注销该玩家。已经登陆但找不到用户就移除该账号。成功登录,就发送消息到网关。 


    1、中心服务器初始化

    初始化mysql句柄池,从数据库获取中心服务器配置,初始化网络被动连接线程池,初始化网络主动连接线程池,主动连接到登录服务器(和gm服务器),
    绑定服务器端口(初始化监听socket,设置收发缓冲区大小(窗口大小128k),并把监听socket注册到epoll描述符里)


    bool center_server::init()
    {
    mysqlPool = new mysql_handle_pool();
    if (NULL == mysqlPool
    || !mysqlPool->putUrl(0, g_xml_config.get_string("Global.MYSQL.Config")))
    {
    g_log->error("连接数据库失败");
    return false;
    }
    
    strncpy(pstrIP, tcp_socket::getIPByIfName(g_xml_config.get_string("Global.NetCard.Config")), MAX_IP_LENGTH - 1);
    
    if (!getServerInfo())//从数据库或配置文件获取中心服务器的配置
    return false;
    
    //初始化连接线程池(网络被动连接线程池)
    taskPool = new tcp_session_pool(g_xml_config.get_integer("Global.ThreadCarryLink.Config"));
    if (NULL == taskPool || !taskPool->init())
    return false;
    
    //初始化客户端连接池(网络主动连接线程池)
    clientPool = new tcp_client_pool(8,50000);
    if (NULL == clientPool || !clientPool->init())
    return false;
        if(!login_client::init(clientPool))//主动连接到登录服务器
    {
    g_log->error("初始化登陆服务器模块...失败");
    return false;
    }
    
    #ifdef GMSERVER
        if(!gm_client::init(clientPool))//主动连接到gm服务器
      {
      g_log->error("初始化登陆服务器模块...失败");
      return false;
      }
    #endif
    
    g_log->info("初始化登陆服务器模块...成功");
    if( !g_main_logic_thread.start())
    {
    g_log->error("初始化main_logic_thread模块...失败");
    return false;
    }
    g_log->info("初始化main_logic_thread模块...成功");
    
    
    if (!server_base::bind_socket(wdPort))//绑定服务器端口(初始化监听socket,设置收发缓冲区大小(窗口大小128k),并把监听socket注册到epoll描述符里)
    {
    return false;
    }
    
    return true;
    }


    2、其他类型服务器的启动验证

    (1)检查服务器依赖 

    检查服务器依赖,如果其他被依赖的服务器都启动了就可以通知该服务器来启动

    除了中心服务器、登录服务器、运营服务器,其他服务器需要等待静态服务器的启动之后才能启动。

    服务器之间依赖的标准来自于数据库的静态表。

    静态服务器:全局唯一并在数据库服务器表中配了的都是,如db服务器、中心服务器、登录服务器、运营服务器、社会关系服务器。

    动态服务器:可启动多个的,如场景服务器和网关服务器。

     

    int center_session::waitSync()
    {
    ...
    unsigned char ptrmsg[tcp_socket::MAX_DATASIZE];
    int msglen = mSocket.recvToCmd_NoPoll(ptrmsg, sizeof(ptrmsg));
    if (msglen > 0)
    {
    using namespace MSG::Server;
    
    stOKStartServerCmd *ptCmd = (stOKStartServerCmd *)ptrmsg;//服务器启动了会发送这个消息来表明其已经启动
      
    if (START_SERVERCMD == ptCmd->first
    && OK_START_SERVERCMD_PARA == ptCmd->second
    && id == ptCmd->ServerID)
    {
    sendmsg(ptCmd,sizeof(stOKStartServerCmd));
    //debug("客户端连接同步验证成功");
    g_log->error("服务器连接同步验证成功,收到消息(%u,%u)",ptCmd->first,ptCmd->second);
    return 1;
    }
    else
    {
    return 0;
    }
    }
    if(!hasNotifyOther && _sequence_timer(main_logic_thread::currentTime) 
    && g_center_session_manager.checkDependence(getType()))//检查服务器依赖,如果其他被依赖的服务器都启动了就可以通知该服务器来启动
    {
    if(notifyOther())
    {
    hasNotifyOther=true; 
    }
    }
    if(!hasNotifyMe && hasNotifyOther && notifyReturnOk())
    {
    hasNotifyMe=true; 
    notifyMe();
    }
    return 0;
    }

    (2)获取数据库中的服务器依赖

    检查服务器的服务器之间依赖,检查其他服务器依赖的静态服务器是否都已经启动。
    中心服务器的连接管理器中可检查获取其他服务器对中心服务器的连接,以此来判断其他服务器是否启动了并连接上中心服务器。

    const bool center_session_manager::checkDependence(uint16 type)
    {
    mysql_record_set *recordset=NULL;
    std::ostringstream oss;
    mysql_record column,where;
    mysql_handle *handle = center_server::mysqlPool->getHandle();
    if (!handle)
    {
    g_log->error("不能从数据库连接池获取连接句柄");
    return false;
    }
    //除了中心服务器、登录服务器、运营服务器,其他服务器需要等待静态服务器的启动之后才能启动
    oss << "type<" << type << " and type!=" << CENTERSERVER << " and type!= " \
    << LOGINSERVER << " and type!= " << OPERATIONLOGSERVER;
    where.put("type",oss.str());
    column.put("id");
    column.put("dynamic");
    column.put("name");
    recordset = handle->exeSelect("SERVERLIST",&column,&where);
    unsigned int i;
    bool bret=true;
    if(recordset)
    {
    g_log->debug("服务器类型:%d找到依赖服务器个数:%d",type,recordset->size());
    for(i = 0; i < recordset->size(); i++)
    {
    center_session *task = g_center_session_manager.getTaskByID((uint16)recordset->get(i)->getvalue("id"));
    uint32 dynamic = recordset->get(i)->getvalue("dynamic");
    if(!dynamic && (!task || task->getState() != tcp_session::okay || !task->notifyMeRetornOk()))
    {
    g_log->debug("等待服务器:%s的启动",(const char *)recordset->get(i)->getvalue("name"));
    bret=false;
    break;
    }
    }
    }
    SAFE_DELETE(recordset);
    center_server::mysqlPool->putHandle(handle);
    return bret;
    }

    3、转发服务器消息

    (1)转发系统消息

    转发服务器消息和广播服务器之间消息(这里接口是处理服务器启动、关闭和系统时间等系统消息)。
    其中:中心连接管理器包含所有被动连接。登录连接管理器包含到登录服务器的连接。

    bool center_session::msgParseStart(const MSG::base_msg *ptrMsg, const unsigned int msglen)
    {
    ...
    case TIMESYNC_START_SERVERCMD_PARA://调整服务器的时间
    {
    stTimeSyncStartServerCmd *rev = (stTimeSyncStartServerCmd *)ptrMsg;
    realtime::set_timesync(rev->sync_sec);
    g_log->debug("调整系统时间相对值:%d",rev->sync_sec);
    g_center_session_manager.broadcast(rev,sizeof(stTimeSyncStartServerCmd));//转发到连接中心会话的其他服务器
    g_login_client_manager.broadcast(rev, sizeof(stTimeSyncStartServerCmd));//转发到登录服务器
    return true;
    }
    break;
    case SHUTDOWN_START_SERVERCMD_PARA://广播服务器关闭消息(服务器关闭需要发送消息到中心服务器)
    {
    stShutdownStartServerCmd *rev = (stShutdownStartServerCmd *)ptrMsg;
    //其他服务器会连接中心服务器,关闭时发送这个消息过来,中心服务器再广播到所有连接它的服务器
    g_center_session_manager.broadcast(rev,sizeof(stShutdownStartServerCmd));
    return true;
    }
    break;
    ...
    }


    (2)转发和处理逻辑消息

    转发服务器消息和广播服务器之间消息。
    使用直发包头消息:其他服务器发来的直发消息,不再转发到其他服务器了。

    使用转发包头消息:服务器之间的消息通过中心服务器转发的消息,和中心服务器主动发送的消息

    (这里的是处理角色登录消息(处理登录、登出、换场景消息,往中心服务器增减中心服务器玩家))。

    stFLServerForwardServerCmd 是服务器之间转发消息在普通消息上加的包头,含服务器id字段和数据长度字段(普通消息长度)


    bool center_session::msgParseForward(const MSG::base_msg *ptrMsg, const unsigned int msglen)
    {
    case SEND_USERCMD_TO_SERVERUSER_FORWARD_SERVERCMD://其他服务器发来的直发消息(不再转发到其他服务器了),会使用这个直发包头
    {
    stSendplayerCmdToServerplayerForwardServerCmd *rev = (stSendplayerCmdToServerplayerForwardServerCmd *)ptrMsg;
    center_player* pplayer = g_center_player_manager.get_player_by_id(rev->charid);
    if(pplayer)
    {
    pplayer->usermsgParse((MSG::base_msg *)rev->data, rev->datasize());//处理中心服务器角色终结、注销、挂起、锁定
    }
    return true;
    }
    break;
    case FL_SERVER_FORWARD_SERVERCMD:
    {
    //服务器之间的消息通过中心服务器转发和中心服务器主动发送的转发消息会使用一个转发包头
    stFLServerForwardServerCmd *rev = (stFLServerForwardServerCmd *)ptrMsg;
    if(!rev->id)//转发消息不解析消息体,根据消息头的服务器id转发到对应的服务器上
    {
    g_login_client_manager.broadcast(rev->data, rev->datasize());//广播登录消息到登录服务器(连接到登录服务器的连接管理器)
    }
    else
    {
    g_login_client_manager.broadcastToID(rev->id,rev->data, rev->datasize());//广播登录消息到登录服务器(按服务器id)
    }
    return true;
    }
    break;
    case SHARE_FORWARD_SERVERCMD:服务器之间的消息通过中心服务器转发和中心服务器主动发送的登录消息会使用一个转发包头 (处理登录相关消息)
    {
    stShareForwardServerCmd *rev = (stShareForwardServerCmd *)ptrMsg;
    loginmsgParse((MSG::base_msg*)rev->data,rev->datasize());//处理角色登录消息(处理登录、登出、换场景消息,往中心服务器增减中心服务器玩家)
    return true;
    }
    break;
    ...
    }

    其中:转发消息构造方式

    uint8 buf[tcp_socket::MAX_DATASIZE];
    MSG::Server::stFLServerForwardServerCmd *sendmsg=(MSG::Server::stFLServerForwardServerCmd *)buf;
    constructInPlace(sendmsg);//构造对象,  模板函数placement new : template<class T> inline void constructInPlace(T  *_Ptr){ new ((void  *)_Ptr) T();}
    sendmsg->id = serverid;
    sendmsg->num=msglen;
    bcopy(ptrmsg,sendmsg->data,msglen);//拷贝消息数据到转发消息体


    4、登陆控制

    (1)中心服务器处理登录服务器连接发来的登录消息 

    处理登录中心角色的流程:

    1)加入登录临时会话到登录管理器

    2)下线存档正在在线的玩家

    3)如果角色在线,那么强行存档

    4)添加账号到中心服务器

    5)如果该玩家已登录就注销该玩家

    6)已经登陆但找不到用户就移除该账号

    7)开始登录,发送消息到网关

    8)成功登录

    bool login_client::msgparser_login(const MSG::base_msg *ptrMsg,const unsigned int msglen)
    {
    switch(ptrMsg->second)
    {
    using namespace MSG::FL;
     
    case MSG::FL::PARA_SESSION_NEWSESSION://登录服务器发来的登录消息
    {
    t_NewLoginMsg *rev = (t_NewLoginMsg *)ptrMsg;
    t_NewLoginMsg  newsession;
    newsession.session = rev->session;
                 
    LoginCommand *loginSession = new LoginCommand(rev->session);
    
    if(loginSession)
    {
    bool ok = true;
    (1-1)加入登录临时会话到登录管理器
    if(!g_loginsession_mgr.addSession(loginSession))//g_loginsession_mgr.addSession 可以查看该玩家是否还在登录流程
    {
    //账号正在网关登陆,有玩家的话就需要进行下线处理(存档和提示前端)
    error_log("账号正在网关登陆%s(%u,%u)",rev->session.account,rev->session.accid,rev->session.loginTempID);
    ok = false;//登录失败,有该玩家正在登录
    }
    (1-2)下线存档正在在线的玩家
      center_player *c_player = g_center_player_manager.get_player_by_accid(rev->session.accid);
      if(c_player) 如果角色在线。那么强行存档
     {
       MSG::Share::t_Force_Save_Player_Data send;
       send.charid = c_player->id;
       strncpy(send.name, c_player->name.c_str(), MAX_NAME_LEN);
       debug_log("角色下线:%u,%s", c_player->id, c_player->name.c_str());
    
       MSG::center::stTerminateErrorcenterCmd logoutsend;
       logoutsend.accid = rev->session.accid;
       c_player->terminate_error = false;
       if(c_player->gateway)
       {
          debug_log("通知网关:%u 角色下线:%u,%s", c_player->gateway->id, c_player->id, c_player->name.c_str());
          c_player->gateway->sendmsg(&logoutsend,sizeof(logoutsend));
       }
    ......
    }
    (1-3)添加账号到中心服务器
    if(ok && !g_center_player_manager.addAccid(rev->session.accid, rev->session.wdGatewayID))
    {
    (1-4)如果该玩家已登录就注销该玩家
    center_player *user = g_center_player_manager.get_player_by_accid(rev->session.accid);
    if(user)//注销该玩家
    {
    if( user->terminate_error )//(1-5)该玩家终结有误的发送终结消息
    {
    info_log("错误终止消息");
    MSG::center::stTerminateErrorcenterCmd send;
    send.accid = rev->session.accid;
    user->terminate_error = false;
    user->gateway->sendmsg(&send,sizeof(send));
    }
    if(!user->terminate_unreg)//(1-6)还没注销的玩家就是重登录,发送终结消息给原来的客户端
    {
    MSG::center::stTerminateErrorcenterCmd send;
    send.accid = rev->session.accid;
    user->terminate_error = false;
    user->gateway->sendmsg(&send,sizeof(send));                               
    warn_log("警告,【%s,%u】试图从别处登陆该游戏帐号",user->name.c_str(), user->id);
     ok = true;
    }
    }
    else
    {
    //(1-7)已经登陆但找不到用户就移除该账号
    error_log("已经登陆但找不到用户,%s(%u,%u)",rev->session.account, rev->session.accid,rev->session.loginTempID);
    g_loginsession_mgr.removeSession(loginSession);
    SAFE_DELETE(loginSession);
    g_center_player_manager.removeAccid(rev->session.accid);
    ok = false;
    return false;
    }
    }
     (1-8)开始登录,发送消息到网关
    if(ok && !g_login_client_manager.sendmsgToGateway(newsession.session.wdGatewayID, &newsession,sizeof(newsession)))
    {
    error_log("帐号%s(%u,%u)登陆时网关已经关闭",rev->session.account, rev->session.accid,rev->session.loginTempID);
    g_loginsession_mgr.removeSession(loginSession);
    SAFE_DELETE(loginSession);
    g_center_player_manager.removeAccid(rev->session.accid);
    ok = false;
    return true;
    }
    
    //成功登录(或重登录)
    debug_log("帐号登陆%s(%u,%u,%u)",rev->session.account, rev->session.accid,rev->session.loginTempID,rev->session.wdGatewayID);
    }
    return true;
    }
    break;
    default:
    break;
    }
    
    g_log->error("%s(%u, %u, %u)", __PRETTY_FUNCTION__, ptrMsg->first, ptrMsg->second, msglen);
    return false;
    }


    (2)登录临时会话管理

    删除过期的会话,删除中心服务器账号。

    在中心服务器的逻辑线程循环里遍历删除需要删除的会话列表:

    LoginVerifyTimeOut exec(main_logic_thread::currentTime);
    g_loginsession_mgr.traverse(exec);
    for(std::list<LoginCommand *>::iterator iter = exec._del.begin() ; iter != exec._del.end() ; ++ iter)
    {
    g_log->debug("通知网关删除Social:(%d,%d)", (*iter)->accid, (*iter)->loginTempID);
    g_loginsession_mgr.removeSession(*iter);
    SAFE_DELETE(*iter);
    }





    更多相关内容
  • 数据中心服务器机架是什么?

    千次阅读 2021-09-17 15:52:48
     什么是数据中心服务器机架?  数据中心服务器机架主要用于容纳数据中心IT设备,如:服务器、存储器、HUB和网络交换机等,旨在提高数据中心网络管理和运营的效率。  数据中心服务器机架的类型有哪些?  (1)开放式...

      
     随着数据中心对计算能力与空间需求的不断增加,服务器机架变得越来越重要。正确使用数据中心服务器机架可以有效的促进不同网络设备的整合,但是,现如今市场上有多种类型的数据中心服务器机架可供选择,那么哪一种最适合您呢?
      什么是数据中心服务器机架?
      数据中心服务器机架主要用于容纳数据中心IT设备,如:服务器、存储器、HUB和网络交换机等,旨在提高数据中心网络管理和运营的效率。
      数据中心服务器机架的类型有哪些?
      (1)开放式服务器机架
      数据中心开放式服务器机架没有门和安装导轨,是一个开放结构,不仅为安装提供了便捷性,同时为线缆管理提供了充足的开放空间,是网络配线架和高密度光纤配线架应用的理想选择。目前开放式服务器机架有两种基本类型:2口与4口机架,其中2口机架的优势在于可以安装深度更大的设备,而4口机架的优势在于能承受重量更大的设备。
      (2)数据中心服务器机柜
      服务器机柜通常指的是“封闭式机架”,具有曲面前门、双开后门、可拆卸左右半侧门与可移动安装导轨。由于服务器机柜的前后门及左右侧门可以锁定,因此具有防尘、防水和电子屏蔽等高度抗扰性能,但是,上述所说的优势也为服务器机柜在冷却领域带来了较大的挑战。显然,封闭式机架在空气流通方面的处理不如开放式机架,所以它必须通过某种通风方式来进行降低温度。
      (3)壁挂式机架
      壁挂式机架主要承载光纤配线架和交换机等网络设备,其设计主要是安装在墙壁上,可以有效节省占地面积。需要注意的是,由于其体积较小,因此不能承受过大的重量,并且不能提供与封闭式机架一样的安全性。如果您想要在办公室或家庭里安置一个机架,壁挂式机架是一种经济实惠的选择。


       

    购买数据中心服务器机架时的注意事项
      1.尺寸
      标准的数据中心服务器机架一般与设备尺寸相匹配,宽度通常为19英寸,但高度和深度有所不同。数据中心服务器机架的高度单位是用U表示,1U表示1.75英寸,而宽度与深度通常用标准单位测量。目前最常用的标准数据中心机架宽度为19英寸,高度为42U(73.5英寸)。
      2.灵活性和可管理性
      为了实现灵活且易于管理的布线环境,在安装设备后,应在服务器机架中留出足够的可用空间。同时,一些数据中心服务器机架还配有滑轮,方便机架的移动。
      3.足够的承重力与容量
      随着越来越多的设备被添加到数据中心,服务器机架应具有足够的承重力与容量。在选择机架时,应考虑交换机、电缆、PDU和架空电缆安装座的数量。
      4.冷却效率
      如今,数据中心的冷却成本在不断增加,因此,选择冷却效果较优质的数据中心服务器机架很重要。一般情况下,好的服务器机架会带有散热管理配件或者一些其他设计,目前,大多数机架门的设计至少具有64%的穿孔,以确保气流的流通。
      5.安全
      数据中心中的某些设备可能需要安全保护,因此,可以选择具有门,侧面板和顶部的数据中心服务器机柜,根据应用的不同,这些附件的设计类型也各不相同。
      数据中心服务器机架中可以安装哪些配件?
      数据中心服务器机架可以容纳所有标准的19英寸设备,但是该设备不能太高或者太深。服务器机架具有可拆卸的安装支架,通常可以直接用螺钉固定在垂直机架导轨上,可支持UPS系统、PDU、电缆管理器、交换机、配线架和光纤配线架等设备。
      总结
      在设计数据中心时,应优先考虑服务器机架。不管选择哪种机架,都要保证网络的安全性,并且正确的进行线缆管理,创建一个有序可靠的网络环境。
      Vecloud作为网络服务商,我们有丰富的海外IDC托管经验,可为用户提供数据跨境跨国传输所需要的SD-WAN组网、MPLS专线、IPLC专线、云专线服务。

     

    展开全文
  • 文章目录一、服务器的定义二、服务器的分类1....数据库服务器什么2.数据库服务器特点1. 编程量减少2. 数据库安全高3. 数据可靠性管理4. 计算机资源利用充分5. 系统性能提高6. 易扩展3.数据库服务器应用三、C语言在Lin

    一、服务器的定义

    服务器英文名称为“Server”,指的是网络环境下为客户机(Client)提供某种服务的专用计算机,服务器安装有网络操作系统(如Windows 2000 Server、Linux、Unix等)和各种服务器应用系统软件(如Web服务、电子邮件服务)的计算机。这里的“客户机”指安装有DOS、Windows 9x等普通用户使用的操作系统的计算机。
    服务器的处理速度和系统可靠性都要比普通PC要高得多,因为服务器是在网络中一般是连续不断工作的。普通PC死机了大不了重启,数据的丢失损失也仅限于单台电脑。服务器则完全不同,许多重要的数据都保存在服务器上,许多网络服务都在服务器上运行,一旦服务器发生故障,将会丢失大量的数据,造成的损失是难以估计的,而且服务器提供的功能如代理上网、安全验证、电子邮件服务等都将失效,从而造成网络的瘫痪,对服务器可靠性的要求可见一斑。

    二、服务器的分类

    服务器的分类可以按照不同的标准,一般可以按外形,CPU指令集,用途来进行分类。

    1.外形

    可以分为塔式服务器、机架服务器、刀片式服务器、高密度服务器。

    这里写图片描述

    2.CPU指令集

    按照服务器的结构,可以分为CISC(复杂指令集)架构的服务器和RISC(精简指令集)架构的服务器:

    1. IA架构服务器(Intel Architecture Server)-即通常所讲的PC服务器,采用x86(CISC)芯片并且主要采用Windows NT/Windows2000、Linux、FreeBSD等操作系统的服务器,如Intel PentiumIII(P4)和Intel (P4)Xeon(至强)等。
    2. RISC架构的服务器指采用非英特尔架构技术的服务器, 使用RISC芯片并且主要采用UNIX操作系统的服务器,如SUN公司的SPARC、HP公司的PA-RISC、DEC的Alpha芯片、SGI公司的MIPS等;
      这里写图片描述

    由于RISC架构服务器的性能和价格比CISC架构的服务器高得多。近几年来,随着PC技术的迅速发展,IA架构服务器与RISC架构的服务器之间的技术差距已经大大缩小,用户基本上倾向于选择IA架构服务器,但是RISC架构服务器在大型、关键的应用领域中仍然居于非常重要的地位。

    3.用途

    我们最关心的通常是服务器上面运行的业务种类和负载类型,不同的业务应用和负载需要不同类型的服务器来承载。根据应用类型,可分为:数据库服务器、应用服务器、文件服务器、Web服务器、接入服务器等。

    1.web服务器

    WEB简介

    WEB服务器也称为WWW(WORLD WIDE WEB)服务器,主要功能是提供网上信息浏览服务。 WWW 是 Internet 的多媒体信息查询工具,是 Internet 上近年才发展起来的服务,也是发展最快和目前用的最广泛的服务。正是因为有了WWW工具,才使得近年来 Internet 迅速发展,且用户数量飞速增长。

    Web服务器是可以向发出请求的浏览器提供文档的程序

    1、服务器是一种被动程序:只有当Internet上运行其他计算机中的浏览器发出的请求时,服务器才会响应。

    2 、最常用的Web服务器是ApacheMicrosoftInternet信息服务器(Internet Information Services,IIS)。

    3、Internet上的服务器也称为Web服务器,是一台在Internet上具有独立IP地址的计算机,可以向Internet上的客户机提供WWW、EmailFTP等各种Internet服务。

    4**、**Web服务器是指驻留于因特网上某种类型计算机的程序。当Web浏览器(客户端)连到服务器上并请求文件时,服务器将处理该请求并将文件反馈到该浏览器上,附带的信息会告诉浏览器如何查看该文件(即文件类型)。服务器使用HTTP超文本传输协议)与客户机浏览器进行信息交流,这就是人们常把它们称为HTTP服务器的原因。

    Web服务器不仅能够存储信息,还能在用户通过Web浏览器提供的信息的基础上运行脚本和程序。

    协议
    1. 应用层使用HTTP协议
    2. HTML(标准通用标记语言下的一个应用)文档格式。
    3. 浏览器统一资源定位器URL)。
    4. 为了解决HTTP协议的这一缺陷,需要使用另一种协议:安全套接字层超文本传输协议HTTPS。为了数据传输的安全,HTTPS在HTTP的基础上加入了SSL协议,SSL依靠证书来验证服务器的身份,并为浏览器和服务器之间的通信加密。
    WWW简介

    WWW是 World Wide Web (环球信息网)的缩写,也可以简称为 Web,中文名字为“万维网”。它起源于1989年3月,由欧洲量子物理实验室CERN(the European Laboratory for Particle Physics)所发展出来的主从结构分布式超媒体系统。通过万维网,人们只要通过使用简单的方法,就可以很迅速方便地取得丰富的信息资料。由于用户在通过 Web浏览器访问信息资源的过程中,无需再关心一些技术性的细节,而且界面非常友好,因而 Web 在Internet 上一推出就受到了热烈的欢迎,走红全球,并迅速得到了爆炸性的发展。

    发展和特点

    长期以来,人们只是通过传统的媒体(如电视、报纸、杂志和广播等)获得信息。但随着计算机网络的发展,人们想要获取信息,已不再满足于传统媒体那种单方面传输和获取的方式,而希望有一种主观的选择性。网络上提供各种类别的数据库系统,如文献期刊、产业信息、气象信息、论文检索等等。由于计算机网络的发展,信息的获取变得非常及时、迅速和便捷。

    到了1993年,WWW 的技术有了突破性的进展,它解决了远程信息服务中的文字显示、数据连接以及图像传递的问题,使得 WWW 成为 Internet 上最为流行的信息传播方式。Web 服务器成为 Internet 上最大的计算机群,Web 文档之多、链接的网络之广,令人难以想象。可以说,Web 为 Internet 的普及迈出了开创性的一步,是近年来 Internet 上取得的最激动人心的成就。

    WWW 采用的是浏览器/服务器结构,其作用是整理和储存各种WWW资源,并响应客户端软件的请求,把客户所需的资源传送到 Windows 95(或Windows98)、Windows NT、UNⅨ 或 Linux 等平台上。

    使用最多的 web server服务器软件有两个:微软的信息服务器(iis),和Apache。

    通俗的讲,Web服务器传送(serves)页面使浏览器可以浏览,然而应用程序服务器提供的是客户端应用程序可以调用(call)的方法(methods)。确切一点,你可以说:Web服务器专门处理HTTP请求(request),但是应用程序服务器是通过很多协议来为应用程序提供(serves)商业逻辑(business logic)。

    Web服务器可以解析(handles)HTTP协议。当Web服务器接收到一个HTTP请求(request),会返回一个HTTP响应(response),例如送回一个HTML页面。为了处理一个请求(request),Web服务器可以响应(response)一个静态页面或图片,进行页面跳转(redirect),或者把动态响应(dynamic response)的产生委托(delegate)给一些其它的程序例如CGI脚本,JSP(JavaServer Pages)脚本,servlets,ASP(Active Server Pages)脚本,服务器端(server-side)JavaScript,或者一些其它的服务器端(server-side)技术。无论它们(译者注:脚本)的目的如何,这些服务器端(server-side)的程序通常产生一个HTML的响应(response)来让浏览器可以浏览。

    要知道,Web服务器的代理模型(delegation model)非常简单。当一个请求(request)被送到Web服务器里来时,它只单纯的把请求(request)传递给可以很好的处理请求(request)的程序(译者注:服务器端脚本)。Web服务器仅仅提供一个可以执行服务器端(server-side)程序和返回(程序所产生的)响应(response)的环境,而不会超出职能范围。服务器端(server-side)程序通常具有事务处理(transaction processing),数据库连接(database connectivity)和消息(messaging)等功能。

    虽然Web服务器不支持事务处理或数据库连接池,但它可以配置(employ)各种策略(strategies)来实现容错性(fault tolerance)和可扩展性(scalability),例如负载平衡(load balancing),缓冲(caching)。集群特征(clustering—features)经常被误认为仅仅是应用程序服务器专有的特征。

    应用程序服务器(The Application Server)

    根据我们的定义,作为应用程序服务器,它通过各种协议,可以包括HTTP,把商业逻辑暴露给(expose)客户端应用程序。Web服务器主要是处理向浏览器发送HTML以供浏览,而应用程序服务器提供访问商业逻辑的途径以供客户端应用程序使用。应用程序使用此商业逻辑就象你调用对象的一个方法(或过程语言中的一个函数)一样。

    应用程序服务器的客户端(包含有图形用户界面(GUI)的)可能会运行在一台PC、一个Web服务器或者甚至是其它的应用程序服务器上。在应用程序服务器与其客户端之间来回穿梭(traveling)的信息不仅仅局限于简单的显示标记。相反,这种信息就是程序逻辑(program logic)。正是由于这种逻辑取得了(takes)数据和方法调用(calls)的形式而不是静态HTML,所以客户端才可以随心所欲的使用这种被暴露的商业逻辑

    在大多数情形下,应用程序服务器是通过组件(component)的应用程序接口(API)把商业逻辑暴露(expose)(给客户端应用程序)的,例如基于J2EE(Java 2 Platform,Enterprise Edition)应用程序服务器的EJB(Enterprise JavaBean)组件模型。此外,应用程序服务器可以管理自己的资源,例如看大门的工作(gate-keeping duties)包括安全(security),事务处理(transaction processing),资源池(resource pooling), 和消息(messaging)。就象Web服务器一样,应用程序服务器配置了多种可扩展(scalability)和容错(fault tolerance)技术。

    例如,设想一个在线商店(网站)提供实时定价(real-time pricing)和有效性(availability)信息。这个站点(site)很可能会提供一个表单(form)让你来选择产品。当你提交查询(query)后,网站会进行查找(lookup)并把结果内嵌在HTML页面中返回。网站可以有很多种方式来实现这种功能。我要介绍一个不使用应用程序服务器的情景和一个使用应用程序服务器的情景。观察一下这两中情景的不同会有助于你了解应用程序服务器的功能。

    情景1:不带应用程序服务器的Web服务器

    在此种情景下,一个Web服务器独立提供在线商店的功能。Web服务器获得你的请求(request),然后发送给服务器端(server-side)可以处理请求(request)的程序。此程序从数据库或文本文件(flat file,译者注:flat file是指没有特殊格式的非二进制的文件,如properties和XML文件等)中查找定价信息。一旦找到,服务器端(server-side)程序把结果信息表示成(formulate)HTML形式,最后Web服务器把会它发送到你的Web浏览器

    简而言之,Web服务器只是简单的通过响应(response)HTML页面来处理HTTP请求(request)。

    情景2:带应用程序服务器的Web服务器

    情景2和情景1相同的是Web服务器还是把响应(response)的产生委托(delegates)给脚本(译者注:服务器端(server-side)程序)。然而,你可以把查找定价的商业逻辑(business logic)放到应用程序服务器上。由于这种变化,此脚本只是简单的调用应用程序服务器的查找服务(lookup service),而不是已经知道如何查找数据然后表示为(formulate)一个响应(response)。这时当该脚本程序产生HTML响应(response)时就可以使用该服务的返回结果了。

    在此情景中,应用程序服务器提供(serves)了用于查询产品的定价信息的商业逻辑。(服务器的)这种功能(functionality)没有指出有关显示和客户端如何使用此信息的细节,相反客户端和应用程序服务器只是来回传送数据。当有客户端调用应用程序服务器的查找服务(lookup service)时,此服务只是简单的查找并返回结果给客户端。

    通过从响应产生(response-generating)HTML的代码中分离出来,在应用程序之中该定价(查找)逻辑的可重用性更强了。其他的客户端,例如收款机,也可以调用同样的服务(service)来作为一个店员给客户结帐。相反,在情景1中的定价查找服务是不可重用的因为信息内嵌在HTML页中了。

    总而言之,在情景2的模型中,在Web服务器通过回应HTML页面来处理HTTP请求(request),而应用程序服务器则是通过处理定价和有效性(availability)请求(request)来提供应用程序逻辑的。

    警告(Caveats)

    XML Web Services已经使应用程序服务器和Web服务器的界线混淆了。通过传送一个XML有效载荷(payload)给服务器,Web服务器现在可以处理数据和响应(response)的能力与以前的应用程序服务器同样多了。

    另外,大多数应用程序服务器也包含了Web服务器,这就意味着可以把Web服务器当作是应用程序服务器的一个子集(subset)。虽然应用程序服务器包含了Web服务器的功能,但是开发者很少把应用程序服务器部署(deploy)成这种功能(capacity)(译者注:这种功能是指既有应用程序服务器的功能又有Web服务器的功能)。相反,如果需要,他们通常会把Web服务器独立配置,和应用程序服务器一前一后。这种功能的分离有助于提高性能(简单的Web请求(request)就不会影响应用程序服务器了),分开配置(专门的Web服务器,集群(clustering)等等),而且给最佳产品的选取留有余地。

    服务器特点

    Windows,Linux与Unix这3个操作系统是架设Web服务器比较常见的操作系统。Linux的安全性能在这3个操作系统中最高,可以支持多个硬件平台,其网络功能比较强大。总的来说,这两大优点是其他操作系统不可替代的:第一,可以依据用户不同的需求来随意修改、调整与复制各种程序的源码以及发布在互联网上;第二,Linux操作系统的市场价格比较便宜,也能够在互联网上免费下载源码。可以说,Linux为架设既高效又安全的Web服务器的比较理想的操作系统。此外,要让Web服务器更具有优越的性能,可以根据服务器系统之特点与用途作进一步的优化与处理,尽量减少Web服务器的数据传输量以及降低其数据传输的频率,进而促进网络宽带的利用率与使用率,以及提高网络客户端的网页加载的速度,同时也可以减少Web服务器各种资源的消耗。

    工作原理

    Web服务器的工作原理并不复杂,一般可分成如下4个步骤:连接过程、请求过程、应答过程以及关闭连接。下面对这4个步骤作一简单的介绍。连接过程就是Web服务器和其浏览器之间所建立起来的一种连接。查看连接过程是否实现,用户可以找到和打开socket这个虚拟文件,这个文件的建立意味着连接过程这一步骤已经成功建立。请求过程就是Web的浏览器运用socket这个文件向其服务器而提出各种请求。应答过程就是运用HTTP协议把在请求过程中所提出来的请求传输到Web的服务器,进而实施任务处理,然后运用HTTP协议把任务处理的结果传输到Web的浏览器,同时在Web的浏览器上面展示上述所请求之界面。关闭连接就是当上一个步骤–应答过程完成以后,Web服务器和其浏览器之间断开连接之过程。Web服务器上述4个步骤环环相扣、紧密相联,逻辑性比较强,可以支持多个进程、多个线程以及多个进程与多个线程相混合的技术。

    2.应用服务器

    应用服务器是指通过各种协议把商业逻辑曝露给客户端的程序。它提供了访问商业逻辑的途径以供客户端应用程序使用。应用服务器使用此商业逻辑就像调用对象的一个方法一样。

    定义

    随着Internet的发展壮大,“主机/终端”或“客户机/服务器”的传统的应用系统模式已经不能适应新的环境,于是就产生了新的分布式应用系统,相应地,新的开发模式也应运而生,即所谓的“浏览器/服务器”结构、“瘦客户机”模式。应用服务器便是一种实现这种模式核心技术。 [1]

    Web应用程序驻留在应用服务器(Application Server)上。应用服务器为Web应用程序提供一种简单的和可管理的对系统资源的访问机制。它也提供低级的服务,如HTTP协议的实现和数据库连接管理。Servlet容器仅仅是应用服务器的一部分。除了Servlet容器外,应用服务器还可能提供其他的[Java EE](https://baike.baidu.com/item/Java EE)(Enterprise Edition)组件,如EJB容器,JNDI服务器以及JMS服务器等。

    市场上可以得到多种应用服务器,其中包括Apache的Tomcat、IBM的WebSphere Application Server、Caucho Technology的Resin、Macromedia的JRun、NEC WebOTX Application Server、JBoss Application Server、Oracle(并购了BEA)的WebLogic等。其中有些如NEC WebOTX Application Server、WebLogic、WebSphere不仅仅是Servlet容器,它们也提供对EJB(Enterprise JavaBeans)、JMS(Java Message Service)以及其他Java EE技术的支持。每种类型的应用服务器都有自己的优点、局限性和适用性。

    分类

    通常,根据确定文档内容的时间,所有文档可以划分为如下三类。

    静态

    静态:静态Web 文档是一个存储于Web服务器的文件。静态文档的作者在写作的时候确定文档的内容。由于文档内容不会变化,所以对静态文档的每次访问都返回相同结果。

    动态

    动态:动态web文档不是以一个预先定义的格式存在,而是在浏览器访问web服务器时创建。当一个请求到达时,web服务器运行一个应用程序创建动态文档(dynamic documents),服务器返回程序的输出作为应答。由于每次访问都要创建新的文档,动态文档的内容是变化的。

    概括

    Web 文档根据文档内信息改变的时间可分为三类。静态文档的信息只有当作者修改时才会改变,动态文档的信息在服务器端收到文档申请时改变,活动文档显示的信息在文档下载到浏览器一端运行后改变。由于创建动态文档的责任在管理文档的服务器一端,支持动态文档也只需修改服务器。实际上,变化意味着扩展,管理动态文档的服务器也包含了处理静态文档的代码。处理动态文档的Web服务器需要三个特性。

    首先,服务器程序必须扩展,当每次请求到达时,能够执行一个单独的创建文档的应用程序。服务器必须编成能够捕获应用程序的输出,并且将该文档返回给浏览器。

    其次,必须为每个动态文档写一个单独的应用程序。

    最后,服务器必须配置成能够知道哪一个URL 对应于动态文档和哪一个URL 对应于静态文档。对每个动态文档,配置时必须说明产生文档的应用程序。每个申请包含着一个对应动态或静态文档的URL,服务器使用配置信息和收到的请求中的URL决定如何处理。如果配置信息说明申请中的URL对应着一个静态文档,服务器就跟往常一样取出文件。如果申请中的URL对应着动态文档,服务器选择生成该文档的应用程序,运行程序,并且把程序的输出作为文档返回给浏览器。

    区别
    应用服务器和WEB服务器的区别

    通俗的讲,Web服务器传送(serves)页面使浏览器可以浏览,然而应用程序服务器提供的是客户端应用程序可以调用(call)的方法(methods)。确切一点,你可以说:Web服务器专门处理HTTP请求(request),但是应用程序服务器是通过很多协议来为应用程序提供(serves)商业逻辑(business logic)。

    下面让我们来细细道来:

    Web型

    Web服务器(Web Server)可以解析(handles)HTTP协议。当Web服务器接收到一个HTTP请求(request),会返回一个HTTP响应 (response),例如送回一个HTML页面。为了处理一个请求(request),Web服务器可以响应(response)一个静态页面或图片, 进行页面跳转(redirect),或者把动态响应(dynamic response)的产生委托(delegate)给一些其它的程序例如CGI脚本,JSP(JavaServer Pages)脚本,servlets,ASP(Active Server Pages)脚本,服务器端(server-side)JavaScript,或者一些其它的服务器端(server-side)技术。无论它们(译者 注:脚本)的目的如何,这些服务器端(server-side)的程序通常产生一个HTML的响应(response)来让浏览器可以浏览。

    企业WEB服务器是面向企业网络用户的信息交流平台,WEB在企业生产管理过程中的应用越来越多,是信息化应用的入口,一些应用系统都集成在WEB服务器上。要知道,Web服务器的代理模型(delegation model)非常简单。当一个请求(request)被送到Web服务器里来时,它只单纯的把请求(request)传递给可以很好的处理请求 (request)的程序(译者注:服务器端脚本)。Web服务器仅仅提供一个可以执行服务器端(server-side)程序和返回(程序所产生的)响 应(response)的环境,而不会超出职能范围。服务器端(server-side)程序通常具有事务处理(transaction processing),数据库连接(database connectivity)和消息(messaging)等功能。

    虽然Web 服务器不支持事务处理或数据库连接池,但它可以配置(employ)各种策略(strategies)来实现容错性(fault tolerance)和可扩展性(scalability),例如负载平衡(load balancing),缓冲(caching)。集群特征(clustering-features)经常被误认为仅仅是应用程序服务器专有的特征。

    应用程序型

    应用程序服务器(The Application Server)

    根据定义,作为应用程序服务器,它通过各种协议,可以包括HTTP,把商业逻辑暴露给(expose)客户端应用程序。Web服务器主要是处理向 浏览器发送HTML以供浏览,而应用程序服务器提供访问商业逻辑的途径以供客户端应用程序使用。应用程序使用此商业逻辑就像你调用对象的一个方法(或过程 语言中的一个函数)一样。

    应用程序服务器的客户端(包含有图形用户界面(GUI)的)可能会运行在一台PC、一个Web服务器或者甚至 是其它的应用程序服务器上。在应用程序服务器与其客户端之间来回穿梭(traveling)的信息不仅仅局限于简单的显示标记。相反,这种信息就是程序逻 辑(program logic)。 正是由于这种逻辑取得了(takes)数据和方法调用(calls)的形式而不是静态HTML,所以客户端才可以随心所欲的使用这种被暴露的商业逻辑。

    在大多数情形下,应用程序服务器是通过组件(component)的应用程序接口(API)把商业逻辑暴露(expose)(给客户端应用程序)的,例 如基于J2EE(Java 2 Platform, Enterprise Edition)应用程序服务器的EJB(Enterprise JavaBean)组件模型。此外,应用程序服务器可以管理自己的资源,例如看大门的工作(gate-keeping duties)包括安全(security),事务处理(transaction processing),资源池(resource pooling), 和消息(messaging)。就象Web服务器一样,应用程序服务器配置了多种可扩展(scalability)和容错(fault tolerance)技术。

    严格意义上Web服务器只负责处理HTTP协议,只能发送静态页面的内容。而JSP,ASP,PHP等动态内容需要通过CGI、FastCGI、ISAPI等接口交给其他程序去处理。这个其他程序就是应用服务器。
    比如Web服务器包括Nginx,Apache,IIS等。而应用服务器包括WebLogic,JBoss等。应用服务器一般也支持HTTP协议,因此界限没这么清晰。但是应用服务器的HTTP协议部分仅仅是支持,一般不会做特别优化,所以很少有见Tomcat直接暴露给外面,而是和Nginx、Apache等配合,只让Tomcat处理JSP和Servlet部分。

    3.文件服务器

    文件服务器(File server),又称档案伺服器,是指在计算机网络环境中,所有用户都可访问的文件存储设备,是一种专供其他电脑检索文件和存储的特殊电脑。 文件服务器通常比一般的个人电脑拥有更大的存储容量,并具有一些其他的功能,如磁盘镜像、多个网络接口卡、热备援多电源供应器。文件服务器已进化成带有RAID存储子系统和其他高可用特性的高性能系统。文件服务器增强了存储器的功能,简化了网络数据的管理。一方面改善了系统的性能,提高了数据的可用性,另一方面减少了管理的复杂程度,降低了运营费用。

    简介

    在客机与服务器模式下,文件服务器(file server)是一台对中央存储和数据文件管理负责的计算机,这样在同一网络中的其他计算机就可以访问这些文件。文件服务器允许用户在网络上共享信息,而不用通过软磁盘或一些其它外部存储设备来物理地移动文件。任何计算机都能被设置为主机,并作为文件服务器(file server)运行。最简单的形式是,文件服务器可以是一台普通的个人计算机,它处理文件要求并在网络中发送它们。在更复杂的网络中,文件服务器也可以是一台专门的网络附加存储(NAS)设备,它也可以作为其他计算机的远程硬盘驱动器来运行,并允许网络中的人像在他们自己的硬盘中一样在服务器中存储文件。文件服务器具有分时系统文件管理的全部功能,提供网络用户访问文件、目录的并发控制和安全保密措施的局域网(LAN)服务器。因此,文件服务器应具备完善的文件管理功能,能够对全网实行统一的文件管理,各工作站用户可以不参与文件管理工作。文件服务器能为网络用户提供完善的数据、文件和目录服务。 [3]

    NAS(网络附加存储)和SAN(存储区域网络)是文件服务器行业主流的两种集中存储的技术。两种技术均将存储与使用存储的系统分离,利用网络实现连通及共享,从而达到存储设备统一使用、统一管理,具有良好的可扩充性。通过合理的、动态的空间划分达到空间的最合理使用,减少扩容的盲目性和降低不必要的扩容成本。通过设备共享和统一管理,减少存储设备的维护和升级的复杂度,降低运行成本,提高维护效率。 [1]

    功能

    文件服务器在网络上提供一个中心位置,可供用户存储文件并通过网络与其他用户共享文件。文件服务器负责共享资源的管理、传递和接收,管理存储设备(硬盘、光盘、磁带)中的文件,为网络用户提供文件共享服务,也称文件共享服务器。 [4]

    文件服务器具有分时系统管理的全部功能,能够对全网统一管理,能够提供网络用户访问文件、目录的并发控制和安全保密措施。

    文件服务器是一台特殊功能的计算机,其主要目的是向客户机提供文件服务。文件服务器可以是一台能够运行其他应用的通用计算机,也可以是一台专门提供文件服务的专用计算机

    分类

    按照是否采用了分布式技术,文件服务器可以分成集中式文件服务器和分布式文件服务器两大类。事实上,集中式与分布式文件服务器并没有明确的界限,可以说只是技术进步而导致的更新换代。如果只在存储环境中部署了单一的具有分布式功能的文件服务器,那么它还是一台集中式的文件服务器。 [1]

    集中式文件服务器

    NAS(网络附加存储)和SAN(存储区域网络)是文件服务器行业主流的两种集中存储的技术。

    (1)SAN

    SAN—存储区域网络,即通过特定的互连方式连接的若干台存储服务器组成一个单独的数据网络,提供企业级的数据存储服务。SAN是一种特殊的高速网络,连接网络服务器和诸如大磁盘阵列或备份磁带库的存储设备,SAN置于LAN之下,而不涉及LAN。利用SAN,不仅可以提供大容量的存储数据,而且地域上可以分散,并缓解了大量数据传输对于局域网的影响。SAN的结构允许任何服务器连接到任何存储阵列,不管数据置放在哪里,服务器都可直接存取所需的数据。

    (2)NAS

    NAS—网络附加存储,即将存储设备连接到现有的网络上,提供数据和文件服务。NAS以网络为中心,支持开放的标准协议,提供跨平台的文件和数据共享服务;部署简单快捷,具有多方位的高扩展性和独立优化的存储操作系统;采用集中的存储模式;可在线扩容和增加设备;支持多种协议的管理软件、日志文件系统、快照和镜像等功能;即插即用。NAS技术主要应用于以文件应用为主的、升级灵活性强和数据在线性高(与SAN在线性高的特点不同的是,可在线扩充系统结构)的企业,代表企业包括ISP、 ICP、 IDC、石油、出版、教育行业和办公环境等。

    分布式文件服务器

    从SAN和NAS扩展出来的分布式文件服务器。

    由于SAN系统本身具有极高的扩展能力,开发商比较容易就能实现SAN网络中的服务器集群。如IBM的S/390 Paralle Sysplex已经提供了跨多个服务器联合体的成员进行无缝负载均衡的服务和操作系统工具。联想也有支持多服务器的SAN解决方案,比较典型的是SureFibre400系列。

    利用联想的SureFibre400搭建的分布式文件服务器系统。该方案使用了两个Brocade3200交换机,每台服务器通过两块光纤通道适配卡(HBA),两条光纤线路分别接入到两台交换机上,提供线路冗余;光纤阵列提供两个主机接口,它们分别接入到两台交换机上,以提供线路冗余和提高性能。

    由于NAS对硬件没有特殊依赖,而主要是依靠软件进行协调的网络存储系统,只要提供支持集群服务的操作系统及相关软件,NAS服务器也能很容易做到分布式布局。NetworkAppliance的NetApp Filer系列就包括用于集群、数据损坏的即时恢复、远程镜像和灾难恢复的软件产品。

    应用NetApp Filer作为存储设备的简单服务器系统。连接到以太网中的两台Filer通过Network Appliance的Data ONTAPTM操作系统组建虚拟文件系统,并可通过增值软件工具Snapshot和SnapRestore提供即时恢复机制。使用Data ONTAP,操作系统甚至可以实现SAN和NAS服务器的整合,将UNIX, Windows, SAN,和WEB数据集中到中央站点。

    4.数据库服务器

    数据库服务器由运行在局域网中的一台/多台计算机和数据库管理系统软件共同构成,数据库服务器为客户应用程序提供数据服务。

    1.数据库服务器是什么

    数据库服务器其实就是装有一台数据库的Server,应用于Internet或Intranet。一个数据库服务器是指运行在局域网中的一台或多台服务器计算机上的数据库管理系统软件,数据库服务器为客户应用提供服务,这些服务是查询、更新、事务管理、索引、高速缓存、查询优化、安全及多用户存取控制等。数据库软件有很多种大型的数据库软件有Oracle,DB2,Sybase等,中型的有SQL Server,还有通常用于个人网站的MySQL等小型数据库软件。

    企业业务对数据库服务器的要求

    (1)数据库服务器要具有极强的承载能力。当企业内部需要查询一些信息时,其后台处理系统(数据库服务器)就要开始查询,并将查找到的信息反馈给用户。当大量的用户在查询信息时,如果数据库服务器不具备极强的承载能力,是无法满足其需求的。

    (2)数据库服务器要具有很强的实时应答能力。当数据信息被检索到后,会反馈给用户,如果数据库服务器不具有很强的应答能力,会造成反馈信息速度非常缓慢,甚至造成数据库服务器死机的情况。

    (3)数据库服务器要具有很强的扩展能力。数据库中的信息随时都会发生变化,如今是信息时代,大量数据需要录入、处理等,因此,数据库服务器的扩展能力不容忽视。

    (4)数据库服务器的可用性和可靠性。数据库服务器要具备365天7*24不间断运行的能力,这样才能满足需要。当然,一台服务器要真正保持这样的运行,也不太现实。因此许多企业的数据库服务器并不只有一台,通常具有多台,并且还配备了备份服务器等。

    大型企业需要的数据库服务器性能和扩展能力等方面要求更高,它们在组建数据库系统时,不仅仅是使用多台数据库服务器,还需要存储系统等。而中小企业则有些不同,它们需要的数据库服务器性能不需要像大型企业数据库服务器那么强,数量要求也没那么多,因此在选择服务器时更轻松一些。

    2.数据库服务器特点
    1. 编程量减少

    数据库服务器提供了用于数据操纵的标准接口API(Application Programming Interface,应用程序编程接 口)。

    2. 数据库安全高

    数据库服务器提供监控性能、并发控制等工具。由DBA(Database Administrator,数据库管理员)统一负 责授权访问数据库及网络管理。

    3. 数据可靠性管理

    数据库服务器提供统一的数据库备份/恢复、启动/停止数据库的管理工具。

    4. 计算机资源利用充分

    数据库服务器把数据管理及处理工作从客户机上分离出来,使网络中各计算机资源能灵活分配、各尽其用。

    5. 系统性能提高

    能大大降低网络开销。

    协调操作,减少资源竞争,避免死锁。

    提供联机查询优化机制。

    6. 易扩展

    支持多处理器(相同类型)的水平扩展。

    支持多个服务器的水平扩展。

    支持垂直扩展,服务器可以移植到功能更强的计算机上,不涉及处理数据的重新分布问题。

    3.数据库服务器应用

    应用:

    数据库服务器其实是应用服务器中的一种,而应用服务器又分很多类,包括邮件服务器,文件服务器,DNS服务器,他们实现的是一种作用,这种作用主要是再硬件服务器设备上集成软件实现,数据库服务器的作用主要是完成数据的处理、缓存、转换等作用,当然,服务器的选择是需要考虑性能参数的。

    三、C语言在Linux上实现一个简易Web服务器

    可以参考这篇博客:【网络编程学习记录1】Linux下的socket演示程序

    服务器端代码 server.cpp:

    #include <stdio.h>
    #include <string.h>
    #include <stdlib.h>
    #include <unistd.h>
    #include <arpa/inet.h>
    #include <sys/socket.h>
    #include <netinet/in.h>
    int main(){
        //创建套接字
        int serv_sock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
        //将套接字和IP、端口绑定
        struct sockaddr_in serv_addr;
        memset(&serv_addr, 0, sizeof(serv_addr));  //每个字节都用0填充
        serv_addr.sin_family = AF_INET;  //使用IPv4地址
        serv_addr.sin_addr.s_addr = inet_addr("127.0.0.1");  //具体的IP地址
        serv_addr.sin_port = htons(1234);  //端口
        bind(serv_sock, (struct sockaddr*)&serv_addr, sizeof(serv_addr));
        //进入监听状态,等待用户发起请求
        listen(serv_sock, 20);
        //接收客户端请求
        struct sockaddr_in clnt_addr;
        socklen_t clnt_addr_size = sizeof(clnt_addr);
        int clnt_sock = accept(serv_sock, (struct sockaddr*)&clnt_addr, &clnt_addr_size);
        //向客户端发送数据
        char str[] = "http://c.biancheng.net/socket/";
        write(clnt_sock, str, sizeof(str));
       
        //关闭套接字
        close(clnt_sock);
        close(serv_sock);
        return 0;
    }
    
    

    客户端代码 client.cpp:

    #include <stdio.h>
    #include <string.h>
    #include <stdlib.h>
    #include <unistd.h>
    #include <arpa/inet.h>
    #include <sys/socket.h>
    int main(){
        //创建套接字
        int sock = socket(AF_INET, SOCK_STREAM, 0);
        //向服务器(特定的IP和端口)发起请求
        struct sockaddr_in serv_addr;
        memset(&serv_addr, 0, sizeof(serv_addr));  //每个字节都用0填充
        serv_addr.sin_family = AF_INET;  //使用IPv4地址
        serv_addr.sin_addr.s_addr = inet_addr("127.0.0.1");  //具体的IP地址
        serv_addr.sin_port = htons(1234);  //端口
        connect(sock, (struct sockaddr*)&serv_addr, sizeof(serv_addr));
       
        //读取服务器传回的数据
        char buffer[40];
        read(sock, buffer, sizeof(buffer)-1);
       
        printf("Message form server: %s\n", buffer);
       
        //关闭套接字
        close(sock);
        return 0;
    }
    

    启动一个终端(Shell),先编译 server.cpp 并运行:

    [admin@localhost ~]$ g++ server.cpp -o server
    [admin@localhost ~]$ ./server
    #等待请求的到来

    正常情况下,程序运行到 accept() 函数就会被阻塞,等待客户端发起请求。

    接下再启动一个终端,编译 client.cpp 并运行:

    [admin@localhost ~]$ g++ client.cpp -o client
    [admin@localhost ~]$ ./client
    Message form server: http://c.biancheng.net/socket/

    client 接收到从 server发送过来的字符串就运行结束了,同时,server 完成发送字符串的任务也运行结束了。大家可以通过两个打开的终端来观察。

    注意这里一定要打开两个终端来进行,因为,执行./server后所在终端就会被占用,无法继续输入命令了,因此执行 ./client需要在另一个终端。结果如下图

    client 运行后,通过 connect() 函数向 server 发起请求,处于监听状态的 server 被激活,执行 accept() 函数,接受客户端的请求,然后执行 write() 函数向 client 传回数据。client 接收到传回的数据后,connect() 就运行结束了,然后使用 read() 将数据读取出来。

    server 只接受一次 client 请求,当 server 向 client 传回数据后,程序就运行结束了。如果想再次接收到服务器的数据,必须再次运行 server,所以这是一个非常简陋的 socket 程序,不能够一直接受客户端的请求。

    源码解析
    先说一下 server.cpp 中的代码。
    第 11 行通过 socket() 函数创建了一个套接字,参数 AF_INET 表示使用 IPv4 地址,SOCK_STREAM 表示使用面向连接的套接字,IPPROTO_TCP 表示使用 TCP 协议。在 Linux 中,socket 也是一种文件,有文件描述符,可以使用 write() / read() 函数进行 I/O 操作,这一点已在《socket是什么》中进行了讲解。

    第 19 行通过 bind() 函数将套接字 serv_sock 与特定的 IP 地址和端口绑定,IP 地址和端口都保存在 sockaddr_in 结构体中。

    socket() 函数确定了套接字的各种属性,bind() 函数让套接字与特定的IP地址和端口对应起来,这样客户端才能连接到该套接字。

    第 22 行让套接字处于被动监听状态。所谓被动监听,是指套接字一直处于“睡眠”中,直到客户端发起请求才会被“唤醒”。

    第 27 行的 accept() 函数用来接收客户端的请求。程序一旦执行到 accept() 就会被阻塞(暂停运行),直到客户端发起请求。

    第 31 行的 write() 函数用来向套接字文件中写入数据,也就是向客户端发送数据。

    和普通文件一样,socket 在使用完毕后也要用 close() 关闭。

    再说一下 client.cpp 中的代码。client.cpp 中的代码和 server.cpp 中有一些区别。
    第 19 行代码通过 connect() 向服务器发起请求,服务器的IP地址和端口号保存在 sockaddr_in 结构体中。直到服务器传回数据后,connect() 才运行结束。

    第 23 行代码通过 read() 从套接字文件中读取数据。

    四、熟悉在Linux上进行开发

    参考这篇博客:Vscode远程连接linux服务器(阿里云服务器)

    在这里插入图片描述
    在这里插入图片描述
    配置一下阿里服务器的信息
    https://raw.githubusercontent.com/xkyvvv/blogpic2/main/img/image-20211113225710015.png

    更改设置,输入密码

    点击登入
    在这里插入图片描述

    输入密码之后,就可以连接上服务器

    在这里插入图片描述

    打开文件夹到相应目录就可以进行开发了,文件也会实时同步到服务器上


    现在我们在Linux服务器上对上面的简易服务器代码进行重现。

    在这里插入图片描述

    展开全文
  • 什么是数据中心虚拟化?

    千次阅读 2022-03-14 21:16:24
    什么是数据中心虚拟化以及它是如何工作的? 数据中心虚拟化是使用云软件平台将物理数据中心转换为数字数据中心,以便公司可以远程访问信息和应用程序。 在虚拟化数据中心中,虚拟服务器(也称为软件定义数据中心 ...

    在过去的十年中,云计算的发展和对灵活 IT 解决方案的需求不断增加,催生了真正改变传统数据中心的新技术,随着服务器虚拟化已成为一种常见做法,许多企业已从物理现场数据中心转向虚拟化数据中心解决方案。

    什么是数据中心虚拟化以及它是如何工作的?

    数据中心虚拟化是使用云软件平台将物理数据中心转换为数字数据中心,以便公司可以远程访问信息和应用程序。

    在虚拟化数据中心中,虚拟服务器(也称为软件定义数据中心 (SDDC))是从传统的物理服务器创建的。此过程通过在管理程序的帮助下模仿其处理器、操作系统和其他资源来抽象物理硬件。管理程序(或虚拟机监视器、VMM、虚拟器)是一种创建和管理虚拟机的软件,它将 CPU、内存和存储等资源视为一个池,可以轻松地在现有虚拟机之间或新虚拟机之间重新分配。

    数据中心虚拟化

    数据中心虚拟化的好处

    数据中心虚拟化为寻求提高盈利能力或更大可扩展性的企业提供了一系列战略和技术优势。在这里,我们将讨论其中的一些好处。

    数据中心虚拟化的好处

    可扩展性

    与需要大量且有时昂贵的采购和时间管理的物理服务器相比,虚拟数据中心的设置相对更简单、更快且更经济。任何经历高水平增长的公司都可能希望考虑实施虚拟化数据中心。

    它也非常适合业务活动季节性增加的公司,在高峰期,与在物理机上购买和安装组件相比,可以以更低的成本和更快的时间添加虚拟化内存、处理能力和存储。同样,当需求放缓时,可以缩减虚拟资源以消除不必要的开支。所有这些对于金属服务器都是不可能的。

    ### 数据移动性

    在虚拟化之前,从常见任务和日常交互到深入分析和数据存储的一切都发生在服务器级别,这意味着只能从一个位置访问它们。借助足够强大的 Internet 连接,可以在需要的时间和地点访问虚拟化资源。例如,员工可以从远程位置访问数据、应用程序和服务,从而大大提高办公室外的工作效率。

    此外,借助基于云的应用程序,如视频会议、文字处理和其他内容创建工具,虚拟化服务器使多功能协作成为可能,并创造更多共享机会。

    节约成本

    通常外包给第三方提供商,物理服务器总是与高级管理和维护相关联。但在虚拟数据中心中它们不会成为问题。与物理服务器不同,虚拟服务器通常以按需付费订阅的形式提供,这意味着公司只需为他们使用的内容付费。相比之下,无论是否使用物理服务器,企业仍然需要承担管理和维护的成本。另外,虚拟化数据中心提供的附加功能可以减少其他业务费用,例如差旅费用。

    云与虚拟化:它们有何关联?

    很容易将虚拟化与云混淆,然而,它们有很大的不同,但也密切相关。简而言之,虚拟化是一种用于从物理硬件系统创建多个模拟环境或专用资源的技术,而云是一种可扩展资源在网络中被抽象和共享的环境。

    创建云通常是为了支持云计算,这是一组原则和方法,可通过任何网络按需向用户提供计算、网络和存储基础设施资源、平台和应用程序。云计算允许不同的部门(通过私有云)或公司(通过公共云)访问一个自动配置的资源池,而虚拟化可以使一个资源像许多资源一样运行。

    在大多数情况下,虚拟化和云协同工作以提供不同类型的服务。虚拟化数据中心平台可以从中央物理位置(私有云)或远程第三方位置(公共云)或两者的任意组合(混合云)进行管理。现场虚拟化服务器由私人或内部团队部署、管理和保护。或者,第三方虚拟化服务器由为许多不同公司提供云解决方案的服务提供商在远程数据中心运行。

    如果您已经拥有虚拟基础架构,要创建云,您可以将虚拟资源汇集在一起,使用管理和自动化软件进行编排,并为用户创建自助服务门户。

    展开全文
  • 游一般用什么配置的服务器呢?

    千次阅读 2022-02-11 13:58:13
    游戏服务器的租用保准是快速、稳定和抗攻击强,这几点非常的重要,还有就是一定要找正规的IDC服务商。服务器的配置要根据自己的实际需求合理的选择,不能一味的追求价格高的,也不能只看便宜的。不同的服务器配置...
  • 解决方法:1,进入网络共享中心的网络连接窗口,选择本地连接右键选择“属性”。如果用的是无线,则选择无线网络连接这一项。2,在本地连接属性窗口,选择“网络”选项卡,然后再选择“Internet协议版本 4 (TCP/IPv4...
  • CDN服务器什么

    千次阅读 2022-01-19 14:19:49
    CDN服务器什么 CDN的全称是Content Delivery Network,即内容分发网络。CDN是构建在网络之上的内容分发网络, 依靠部署在各地的边缘服务器,通过中心平台的负载均衡、内容分发、调度等功能模块,使用户就近获取所...
  • 2022-2028全球及中国数据中心服务器行业研究及十四五规划分析报告 受新冠肺炎疫情等影响,QYResearch调研显示,2021年全球数据中心服务器市场规模大约为 亿元(人民币),预计2028年将达到 亿元,2022-2028期间年...
  • 服务器指一个管理资源并为用户提供服务的计算机,通常分为文件服务器、数据库服务器和应用程序服务器。运行以上软件的计算机或计算机系统也被称为服务器。相对于普通PC来说,服务器在稳定性、安全性、性能等方面都...
  • xp自带的时间同步服务器老是会连不上,这里就教大家换成中科院国家授时中心服务器。中国国家授时中心的时间服务器IP地址及时间同步方法大家都知道win7旗。用来同步电脑的时间的服务器、DNTS。为更好的满足用户的...
  • 大数据处理中心什么意思 什么是数据处理中心(数据中心) (What Is A Data Processing Centre (Data Center)) A central data processing service is commonly used to fill a critical mission on computers and ...
  • 服务器灾备解决方案--两地三中心(图文详解)

    万次阅读 多人点赞 2020-01-27 23:48:52
    在线两地三中心灾备方案网络设计如下: 容灾系统 衡量指标 衡量容灾系统的主要指标有 RPO(Recovery Point Object) :灾难发生时允许丢失的数据量 RTO(Recovery Time Objective) : 系统恢复的时间 容灾半径: ...
  • 游戏服务器——中心

    千次阅读 2020-05-09 21:12:04
    服务器信息调度:DB Server第一个启动,随后中心服启动,中心服启动前会和DB Server进行连接,之后其他服务器(网关服、登陆服、广场服、游戏服、Web Server)启动前都会和中心进行连接,当中心服收到别的服务器连接...
  • PUE是什么?说说数据中心和PUE

    万次阅读 2019-10-16 14:52:54
    1、什么是PUE? 从数据中心诞生的那天起,高耗能仿佛就成为数据中心的“原罪”。因此谈数据中心,就不能不谈PUE这个名词。PUE的英文全称是Power Usage Effectiveness,又叫电源使用效率。PUE是评价数据中心能源效率...
  • 戳蓝字“CSDN云计算”关注我们哦!作者 |Hardy责编 | 阿秃服务器对每个从事IT工作的人来说并不陌生,但是服务器所涉及的各种知识细节,并非大家都十分清楚,为...
  • 两地三中心什么意思

    千次阅读 2020-04-22 11:05:16
    两地三中心 随着IT应用的快速发展,金融,银行,政府等越来越多的用户要求核心业务7*24不断网,不断电持续运行,进而出现了两地三中心的方案,是一些大型企业因为大自然的灾害而在同城选择两个机房异地选择一个机房...
  • 虽然我一开始就参与了比特币,但我从未参与过以太坊或Web3,目前没有拥有...以太坊实际上并不是去中心化的 在谈到关于服务器和密码学的想法之前,我先说一个小小的技术分歧。 Moxie论点的核心是观察到以太
  • 什么是点对点?什么去中心化?

    千次阅读 2022-02-22 16:30:07
    接下来就由我为大家讲解什么是中心化,喜欢的点赞关注谢谢大家! 1.什么是点对点 我们时常会用到手机支付、发送邮件、微信聊天,这些应用背后都存在第三方机构,这些机构就是中心服务器。举个例子:当我们使用...
  • 大家都知道计算机电脑的时间是由一块电池供电保持的,而且准确度比较差经常出现走时不准的时候。通过互联网络上发布的一些公用网络时间...现在中国的国家授时中心发布了一个时间服务器地址,大家可以用国人自己的标...
  • linux服务器什么

    千次阅读 2021-02-24 15:58:05
    Linux服务器具有什么样的优势 1.稳定性 Linux系统是众所周知最具稳定性的系统;事实上,以Linux系统的美国服务器用户在出现系统崩溃的反馈上比例非常少。这对于用户来说,特别是小型和中小型企业的用户特别有价值,...
  • 在今年11月份的时候耐克上线了自己官方的nikeapp,这是一个比snkrs更全面的抢...nikeapp无法连接服务器什么原因1.更新版本如果当前NIKEAPP版本许久未更新,会出现无法连接服务器的问题,建议大家更新到最新版本ni...
  • 一、什么是WEB服务器  Web服务器可以解析HTTP协议。当Web服务器接收到一个HTTP请求,会返回一个HTTP响应,例如送回一个HTML页面。为了处理一个请求Web服务器可以响应一个静态页面或图片,进行页面跳转或者把动态响应...
  • 什么是云计算数据中心? 现在可能会有很多人对云计算、数据中心还有大数据等这类技术和名次感到模糊不清,云计算数据中心是一种基于云计算架构的,计算、存储及网络资源松耦合,完全虚拟化各种IT设备、模块化程度较...
  • Internet Explorer,Firefox,Chrome等Web浏览器是世界上最受欢迎的网络应用程序之一。...客户端 – 服务器网络设计和WebWeb浏览器和Web服务器一起用作客户端 – 服务器系统。在计算机网络中,客户端 ...
  • 目前,国家授时中心提供两种计算机网络时间服务:SNTP(Simple Network Time Protocol)校时软件服务和“时间精灵”服务。网络授时精度一般为几十毫秒~几百毫秒。 国家授时中心SNTP校时服务的IP地址是:210.72.145....
  • 什么是服务器ECS?云服务器ECS详解一、前言二、云服务器ECS详解为什么选择云服务器ECS?产品架构产品定价管理工具部署建议相关服务三、写在后面的话 叮嘟!这里是小啊呜的学习课程资料整理。好记性不如烂笔头,...
  • 什么要使用注册中心 有使用过ip:port地址直接调用服务的开发经历么?该段痛苦的经历在此处省略500字......,该种方式的缺点: 需要手动的维护所有的服务访问ip地址列表。 单个服务实现负载均衡需要自己搭建,...
  • 什么是IDC?IDC数据中心什么意思?

    万次阅读 2019-11-01 10:44:18
    作为一位从事网络工作者...IDC翻译过来的字面意思就是数据中心,它首要是为企业、媒体、网站供给大规模、高质量、安全可靠的互联网服务,首要包含:服务器托管、网站空间租用、带宽批发等业务。加上现在的idc服务商...
  • 站群服务器什么

    千次阅读 2019-09-26 09:03:29
    随着网站建设及营销手段的不断发展进化,不少企业以及个人站长经营起多个网站来进行群网营销,此刻就需要用到站群服务器了,站群服务器什么呢?下面我们一起来看看。 站群服务器什么? 站群服务器是单独为一...
  • 本篇解释大家经常问到和混淆的一个概念:超融合服务器什么?超融合一体机是什么?两者有什么区别?下文特别整理了相关概念介绍。 首先,超融合是近几年兴起的一种新的IT 基础架构,这种架构具备以下特点: 1....

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 565,477
精华内容 226,190
关键字:

中心服务器是什么