当前位置: 首页 > 服务器&&网络编程 > 正文

Linux 服务器框架

Linux服务器框架和编程规范

Linux 服务器编程规范

1.日志系统

日志系统对与服务器有着置关重要的作用,首先,运维人员在解决问题的时候日志是一个重要的判断依据。

服务器的日志系统包含以下的两种:

@应用级别的日志

@内核级别日志

日志实现方式:

@系统自带的rsyslogd 日志系统,这是一个守护进程,它负责读取系统/proc/kmsg 的内核日志文件。

@我们还可以调用syslog 函数,这个函数与rsyslog 守护进程通信,我们可以用这个函数来帮我们写日志。

2016-03-23 10:22:11 的屏幕截图

这三个函数就是来给我们提供日志服务的。

@第一个帮助我们格式输出一些东西,一般第一个是程序名,第二个是输出内容,第三项是级别

@第二个直接帮助我们写日志的一个函数,第一个参数是日志级别,第二个是格式化输出

@第三个是关闭日志功能,其实就是在关闭文件描述符。

用户权限设置:

我们知道服务程序一般都是以超级用户来运行的,但是我们更期望它以ROOT身份启动,其它身份运行,这就是需要我们修改权限了。

UID  EUID 这个两个概念可以帮助我们解决问题。

切换用户:我们可以修改运行用户,以超级用户启动,但是可以切换到普通用户,这样就可以了

使用着两个函数:

#include <sys/types.h>
#include <unistd.h>

int setgid(gid_t gid);

int setuid(uid_t uid);

我们还应该关心进程之间的关系,包括进成组,会话,父子进程之间的关系。

系统资源的限制:

我们可以使用以下函数或取系统资源的限制:

2016-03-23 10:57:34 的屏幕截图

@需要修改的资源类型

@限制数值结构体

2016-03-23 10:57:46 的屏幕截图

@一个是软限制@一个是硬限制

 

服务器编程框架

C/S 模型,就是我们常说的服务器-客户端模型,这个模型将资源根据功能分开了,这就是根据功能而演化出了行为的变化。

P2P 模型,这个模型回归到了原本的行为,每台主机即是客户端,又是服务器。

服务器编程框架

不管是集群还是单机基本都是这样一个框架:

ser

这样的定义有点像递归的定义,我们现在来说说这几个的具体意思:

模块                    单个服务器                           服务器集群

IO处理                就是连接                               几个专门的服务器来进行负载均衡

逻辑单元             业务进程或线程                    逻辑服务器

网络存储单元      本地数据库等                       数据库服务器

请求队列             各单元之间的通信方式         各服务器之间的永久TCP连接

 

IO模型

服务器程序常常需要处理三类事件,IO事件,信号事件,定时器事件

阻塞IO            程序阻塞于读写函数

IO复用            程序阻塞IO复用,但是可以监听多个IO事件

SIGIO信号     信号触发读写就绪事件

 

异步IO           内核执行读写操作并触发读写事件,程序没有阻塞

Reactor  模式

reator

这个模型还是同步的模型,等待有读事件后才分配线程来处理逻辑。

Proactor 模式

Proactor

这个模型就是异步模型,由内核来提供数据拷贝完成工作,当内核把事情完成后就发送一个信号来处理这个逻辑问题。

半同步/半异步模式

hh

 

半同步/半反应堆模式

hf

这个其实还是有一个明显的问题的,就是这个队列的锁操作可能会消耗额外的时间。

领导者/追随者模式,其实就是主从模型

  1. 有若干个线程(一般组成线程池)用来处理大量的事件
  2. 有一个线程作为领导者,等待事件的发生;其他的线程作为追随者,仅仅是睡眠。
  3. 假如有事件需要处理,领导者会从追随者中指定一个新的领导者,自己去处理事件。
  4. 唤醒的追随者作为新的领导者等待事件的发生。
  5. 处理事件的线程处理完毕以后,就会成为追随者的一员,直到被唤醒成为领导者。
  6. 假如需要处理的事件太多,而线程数量不够(能够动态创建线程处理另当别论),则有的事件可能会得不到处理。

本文固定链接: http://zmrlinux.com/2016/03/23/linux-%e6%9c%8d%e5%8a%a1%e5%99%a8%e6%a1%86%e6%9e%b6/ | Kernel & Me

该日志由 root 于2016年03月23日发表在 服务器&&网络编程 分类下, 你可以发表评论,并在保留原文地址及作者的情况下引用到你的网站或博客。
原创文章转载请注明: Linux 服务器框架 | Kernel & Me