c语言怎么开发服务器?

c语言怎么开发服务器?,第1张

C语言开发服务器可以说是一件非常困难和辛苦的事情。首先你需要对网络编程非常熟悉,因为服务器需要通过网络进行访问,它必须架构在网络协议上,然后你需要对网络协议和相关的程序设计接口非常了解,比如socket编程、>一看就是服务器用的主板啊
应该是华硕Z8PE-D18这个型号吧,价格大概4000多块钱吧
产品规格
处理器 2 x Socket 1366
支持四核英特尔® 至强® W5500系列处理器(130W)
支持四核英特尔® 至强® X5500系列处理器(95W)
支持四核英特尔® 至强® E5500系列处理器(80W)
支持四核英特尔® 至强® L5500系列处理器(60W/38W)
QPI 48 /586 /64 GT/s
芯片组 英特尔® 5520 chipset IOH
英特尔® ICH10R I/O控制器
尺寸 SSI EEB 361
12" x 13"
华硕独特功能 支持机架式(机架式和直立式两用)
ASWM20管理软件
风扇转速控制
内存 插槽数:18 (3通道/CPU, 9-DIMM/CPU)
容量:最大可扩充至144GB (RDIMM) , 最大可扩充至48GB (UDIMM)
内存类型:DDR3 800/1066/1333 Reg DIMM/ Unbuffered DIMM with ECC
内存尺寸:1GB 2GB 4GB 8GB (RDIMM); 1GB 2GB 4GB (UDIMM)
扩展槽 PCI/PCI-X/PCI-E插槽数:6
插槽位置1: 1 PCI-E x8 (Gen1 x4 Link) (Auto disable 如PIKE插槽占用,自动屏蔽)
插槽位置2: 1 PCI32
插槽位置3: 1 PCI-E x16 (Gen2 x16 Link) (如插槽4占用,自动转到x8 Link)
插槽位置4: 1 PCI-E x16 (Gen2 x8 Link)
插槽位置5: 1 PCI-E x16 (Gen2 x16 Link) (如插槽6占用,自动关闭)
插槽位置6: 1 PCI-E x16 (Gen2 x16 Link 支持1U 全高/全长 卡) (如插槽5占用,自动关闭, 支持MIO声卡插槽)
附加插槽1: 1 PIKE插槽,支持存储扩展功能
存储 SATA控制器:
Intel® ICH10R:
6 SATA2 300MB/s接口
英特尔矩阵存储技术(仅支持Windows)
(支持软件RAID 0, 1, 10 & 5)
LSI® MegaRAID (支持Linux/Windows)
(支持软件RAID 0, 1, 10)
SAS控制器:
选购:
华硕PIKE 1064E 4-port SAS RAID卡
华硕PIKE 1068E 8-port SAS RAID卡
华硕PIKE 1078 8-port SAS HW RAID卡
华硕PIKE 6480 8-port SAS RAID卡
网络 LAN:1 双接口 英特尔82576EB (VMDq) + 1 Mgmt LAN
显卡 VGA:Aspeed AST2050 8MB
板载I/O接口 3 x PSU接口 : 24-pin SSI电源接口 + 8-pin SSI 12V + 8-pin SSI 12V电源接口
1 x 管理接口: 板载接针支持选购的管理卡
3 x USB接口 (支持5 USB接口) (其中1个支持内部Type A USB接口)
8 x风扇接口: 4-pin
2 x SMBus接口
1 x机箱开启检测接口
2 x前置LAN LED指示灯接口
1x 串口接针
背板I/O接口 1 x外部串口
2 x外部USB接口
1 x VGA接口
2 x RJ-45接口+ 1管理接口
1 x PS/2键盘/鼠标接口
管理软件 软件:ASWM20
带外远程管理:选购ASMB4-iKVM,支持KVM-over-Internet
硬件监控 CPU温度
风扇转速
电磁干扰 *** 作温度:10℃ ~ 35℃ / 非运作时温度: -40℃ ~ 70℃
非运作时湿度:20% ~ 90% (无凝露))
附件 标准礼品盒包装(1片装):
6 x SATA数据线
1 x I/O挡板
1 x 华硕主板支持光盘
1 x 用户指南
标准整批包装(10片装):
1 x I/O 挡板
1 x 华硕主板支持光盘
1 x 用户指南
支持18根内存与扩充插槽6的EEB服务器主板

华硕Z8PE-D18服务器主板拥有卓越的处理能力,其搭载的18根内存插槽和6根扩充槽,能满足严苛计算环境的需求及今后的升级需要。
支持18根内存与扩充插槽6的EEB服务器主板
标准EEB尺寸主板支持18个内存插槽与扩充插槽6
Z8PE-D18是一款拥有18个内存插槽及传统转接卡插槽(扩充插槽6)的标准EEB(12” x 13”) 规格服务器主板,为您提供最高的内存容量。
支持华硕PIKE存储扩充卡
选购华硕PIKE(Proprietary I/O Kit Expansion)升级套件具有以下两个优势:
-灵活的SAS存储扩充选择;
-专用的PIKE插槽位于服务器主板边缘,不会影响系统使用全高扩充卡;
Flex-E技术与MIO卡提供服务器与工作站双重应用
华硕Flex-E技术可以实现2个真正的PCI-E x16 Link (支持两张双层显示卡)或1个PCI-E x16 Link及2个 PCI-E x8 Link(用于I/O扩充)之间的自动转换,从而让使用者在服务器与工作站模式中选择;另外,MIO声卡可在71声道的环境中提高信噪比,为专业使用者提供优化的音效环境。
便利的虚拟化应用 支持VMDq
板载LAN支持Intel® VMDq技术,能提高CPU利用率、减少延时,强化虚拟机的处理能力和虚拟环境的效能。
选购ASMB4-iKVM升级套件 维护从此变简单
ASMB4-iKVM模块基于BIOS层面作业,让使用者可通过键盘、监视器和鼠标(KVM over Ethernet)在远程对系统进行实时监控,系统管理人员只需本地计算机就可在任何时间、任何地点进行上述作业、解决系统可能出现的问题。
高质量的部件 保证系统可靠性
华硕是第一个将6相式CPU电源、3相式内存电源和超长寿命全固态电容(All Ultra Long Life Solid Capacitor)采用到服务器主板的厂商。这些部件不仅可以支持高端130W CPU,还保证了系统高效、可靠的作业。
另外,Z8PE-D18还搭载了EPU (Energy Processing Unit)节电设计,虚拟化应用、CrossFire支持等多种技术,是高效型计算应用的理想选择。

转载表面上看,是一套基于B/S方式实现的分布式管理系统,但其实背后的架构是基于C/S完成的。你以为他是一只鞋吗?其实他是一个吹风机。作为界面化的系统,浏览器框架是不可或缺的,但更加重要的东西在Socket上面。

一、需要解决中央控制端到各节点服务器之间的通信。

这个其实牵扯到一个通信协议的问题,各语言都有自己的socket,thread的库,直接调用即可。但是这个通信协议就需要自己来完成了。既不能太简单,太简单了,明码传输,如果别人获知了这个接口,就很容易执行一些令人讨厌的 *** 作。也不能太复杂,太复杂了等于是给自己找麻烦,所以简单的数据包编解码的工作或者用token验证的方式是需要的。通信协议起码要两种,一种是传输命令执行的协议,一种是传输文件的协议。

二、跨语言的socket通信

为什么要跨语言,主控端和代理端通信,用什么语言开发其实无所谓。但是为了给自己省事,尽可能使用服务器上已经有了的默认语言,Ambari前期采用phppuppet的方式管理集群,这不是不可以,puppet自己解决了socket通信协议和文件传输的问题,可你需要为了puppet在每台服务器上都安装ruby。我是个有点服务器和代码洁癖的人。光是为了一个puppet就装个ruby,我觉得心里特对不起服务器的资源。所以我自己写了一个python的代理端。python是不管哪个linux系统在安装的时候就都会有了。然后主控端的通信,可以用python实现,也可以用php实现,但是考虑到对于更多的使用者来说,改php可能要比改tornado简单许多,所以就没用python开发。hadoop分支版本众多,发布出去,用户要自己修改成安装适合自己的hadoop发行版,就势必要改源码,会php的明显比会python的多。php里面的model封装了所有的 *** 作,而python只是个 *** 作代理人的角色而已。

所以也延伸出一个问题,什么语言用来做这种分布式管理系统的代理端比较合适,我自己觉得,也就是python比较合适了, *** 作系统自带,原生的package功能基本够用。用java和php也可以写agent,但是你势必在各节点预先就铺设好jre或者php运行环境。这就跟为什么用python和java写mapred的人最多是一样的。没人拦着你用nodejs写mapred,也可以写,就是你得在每个节点都装v8的解释引擎,不嫌麻烦完全可以这样干。原理参看map/rece论文,不解释。perl也是 *** 作系统原生带的,但是perl的可维护性太差了,还是算了吧。

所以这就牵扯到一个跨语言的socket问题,理论上来说,这不存在什么问题。但这是理论上的,实际开发过程中确实存在问题,比如socket长连接,通信数据包在底层的封装方式不同。我没有使用xml-rpc的原因之一就是我听说php的xmlrpc跟其他语言的xmlrpc有不同的地方,需要修改才能用,我就没有用这种办法。最早是自己定义的 *** 作协议,这时就遇到了这些问题,所以后来直接采用了thrift方式。就基本不存在跨语言的socket通信问题了。

三、代理端执行结果的获取

无论命令还是文件是否在代理端执行成功,都需要获取到执行结果返回给中央端。所以这里也涉及一个读取节点上的stdout和stderr的问题。这个总体来说不是很难,都有现成的包。当然这个时候你需要的是阻塞执行,而不能搞异步回调。

还有个问题是,我要尽可能使用python默认就带的包,而尽量不让服务器去访问internet下载第三方的包。

还有代理端最重要的一点,就是python的版本兼容性。centos5用python24,centos6用python26,ubuntu基本默认都是27。所以一定要最大限度的保证语言的跨版本兼容性,要是每个 *** 作系统和每一个版本我都写一个代理,我一个人就累死了。

四、浏览器端的model,view,controller

这里面你要封装好所有的通信协议,以及需要在节点上面执行的脚本。发送文件的 *** 作和数据库 *** 作也要在model里面完成。

如果对tcl/tk很熟,也可以写基于 *** 作系统界面方式的管理,不用浏览器就是了。

view对我来说是最痛苦的事,都是现学的jQuery怎么用,前端的工作太可怕了。关于这方面,没有太多可描述的,html和js带给我的只有痛苦的回忆,万恶的undefined。

五、跨 *** 作系统的安装文件封装。

要适应不同的 *** 作系统也是个很麻烦的事情,需要用agent提前获知 *** 作系统的发行分支,版本号。然后去找到对应的安装文件去执行。你不能保证一个分布式系统的集群中所有的节点都可以访问internet,更多的情况是这些节点都存在在一个安全的内网中。只有个别几个节点是可以访问外网的。所以,我势必要把所有的安装文件以及他们的依赖尽可能集中起来。我不确定安装 *** 作系统的lzo,yum或者apt-get会去下什么鬼东西,甚至无论是yum还是apt-get,里面都没有hadoop-lzo的库文件。所以,最好的办法是自己编译打包rpm和deb包。直接安装就好了,别去找repo下载什么。

这就是第五步工作,把需要的依赖的东西自己编译打包成rpm和deb。

deb包很好解决,但是rpm就没那么好办了,需要学习rpm的编译文件如何编写,这块是挺麻烦的,但是这玩意用好了还是挺不错的。现在我自制的安装包里面就已经包含了自己编译的lzo和snappy两种压缩库,以及hadoop-gpl-packaging的rpm和deb。下一个发布的easyhadoop将直接支持centos5,6,suse,以及ubuntu/debian的系统上安装hadoop。已经自带了lzo和snappy以及lzop和snzip。

六、把这些所有东西,整合到一个系统里面。

关联这些所有事情间的联系,整合到一个浏览器界面里面去。写一个分布式的管理脚本不难,写一个界面也不难,但是也许是我的水平不行,这两件事结合起来让他们协同工作还是有点难度的。对我来说,写界面的工作可能更难一点。

Cloudera可能是十来个人在写Manager的东西,ambari也是放到github和apachesvn上面,apache基金会的各种committer在写。easyhadoop没他们功能那么强大,一年来只有我一个人设计架构,功能,各种语言的编码,测试,发布。Fortheloveofgod,WhathaveIdone(英文部分请站在山顶仰天长啸)T_T。从前台到后台,到hadoop和生态系统以及他们的依赖软件的单独patch、编译打包。(系统yum或者apt-get的包不如自己打的好使。)

从时间上来看,全球第一款开源的hadoop部署管理系统应该还是属于ambari,2011年8月开始写的,2012年9月底进入apache的incubator。我是大概2012年8月开始写的easyhadoop,全球第一没赶上,估计国内第一个开源的hadoop管理系统还是可以排上的。

废话不多说,直接来干的。这里介绍一套成熟的方案。

gitlab(代码管理)+jenkins(持续集成)+k8s(服务管理)

其中涉及到的技术细节:dockerindockermakefile

gitlab使用介绍

gitlab是一款类似github的开源代码管理软件,可在公司内网,直接搭建一套私有代码仓库,适合团队多人开发,具有完善的分支管理、角色管理、issue、里程碑等。是非常优秀的一款软件。

jeknis使用介绍

这是一款开源持续集成软件,说人话就是使用他可以自动化部署服务。其具有gitlab相关的插件,安装后可直接对接gitlab,当gitlab发生push或者merge代码事件,会通知jeknis去完成最新推送的代码的镜像构建和部署。

推荐上面说的两款技术和jeknis混合使用。

1dockerindocker技术。顾名思义就是docker里面运行docker,简单点直接用dockerfile在jeknis镜像的基础上安装docker客户端或者k8s客户端。这样我们在容器中就可以直接调用宿主机的docker命令或者k8s命令。这对我们使用jenkins执行部署脚本,通知k8s或者docker部署服务,非常方便。

2makefile之所以介绍这款他,是因为其具有一个绝佳的功能,可以检测文件内容是否发生变化,这样对于微服务架构,其配合jenkins,无需指定什么,就可以部署上发生文件变化的微服务。而不会影响到其他服务。

k8s使用介绍

这款当红炸子鸡,相信大家耳闻已久。其实现了对docker的管理和编排。配合上共享存储和其服务自动重启机制,可以让我们的服务无当机。

对于docker内部服务的暴露推荐ingress+service

docker镜像管理推荐harbor。

以上完整的自动化开发部署环境,有兴趣的可以自行学习相关内容,进行搭建测试。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/10609815.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-10
下一篇 2023-05-10

发表评论

登录后才能评论

评论列表(0条)

保存