文章的目的为了记录使用C语言进行linux 开发学习的经历。开发流程和要点有些记忆模糊,赶紧记录,防止忘记。
推荐链接:
linux C 语言开发 (一) Window下用gcc编译和gdb调试
linux C 语言开发 (二) VsCode远程开发 linux
linux C 语言开发 (六) 程序的编辑和编译(vim、gcc)
Linux C到Android App开发推荐链接(入门十二章):
开源 java android app 开发(一)开发环境的搭建_csdn 开源 java android app-CSDN博客
开源 java android app 开发(一)开发环境的搭建-CSDN博客
开源 java android app 开发(二)工程文件结构-CSDN博客
开源 java android app 开发(三)GUI界面布局和常用组件-CSDN博客
开源 java android app 开发(四)GUI界面重要组件-CSDN博客
开源 java android app 开发(五)文件和数据库存储-CSDN博客
开源 java android app 开发(六)多媒体使用-CSDN博客
开源 java android app 开发(七)通讯之Tcp和Http-CSDN博客
开源 java android app 开发(八)通讯之Mqtt和Ble-CSDN博客
开源 java android app 开发(九)后台之线程和服务-CSDN博客
开源 java android app 开发(十)广播机制-CSDN博客
开源 java android app 开发(十一)调试、发布-CSDN博客
开源 java android app 开发(十二)封库.aar-CSDN博客
linux C到.net mvc开发推荐链接:
开源C# .net mvc 开发(一)WEB搭建_c#部署web程序-CSDN博客
开源 C# .net mvc 开发(二)网站快速搭建_c#网站开发-CSDN博客
开源 C# .net mvc 开发(三)WEB内外网访问(VS发布、IIS配置网站、花生壳外网穿刺访问)_c# mvc 域名下不可訪問內網,內網下可以訪問域名-CSDN博客
开源 C# .net mvc 开发(四)工程结构、页面提交以及显示_c#工程结构-CSDN博客
开源 C# .net mvc 开发(五)常用代码快速开发_c# mvc开发-CSDN博客、
内容:linux服务器和中间件的功能和应用场景介绍。
核心概念区分
-
服务器 :通常指一个软件程序,运行在操作系统之上,为客户端(如浏览器、App)提供特定的服务。例如,Web服务器提供网页,数据库服务器存储数据。
-
中间件 :位于操作系统、数据库和应用软件之间的基础软件。它不直接提供最终服务,而是为应用程序提供运行和开发的环境,帮助不同组件之间进行通信、数据交换和集成。可以把它看作应用的"胶水"和"平台"。
一、Web 服务器
主要负责处理HTTP/HTTPS请求,返回静态内容(如HTML、图片、CSS、JS文件),或将动态请求转发给应用服务器。
1. Nginx
-
功能类型:高性能的HTTP和反向代理服务器,也可作为邮件代理服务器、负载均衡器。
-
特点:
-
事件驱动、异步非阻塞架构:能够处理海量并发连接,且资源占用极低。
-
静态内容处理能力强:直接返回静态文件的速度非常快。
-
强大的反向代理功能:可以作为流量入口,将请求分发到后端的多个应用服务器。
-
-
应用场景:
-
作为静态内容服务器。
-
作为负载均衡器,分发请求到Tomcat、Node.js等后端应用集群。
-
作为反向代理,实现请求路由、缓存、SSL终结等。
-
构建高并发网站的首选。
-
2. Apache HTTP Server
-
功能类型:老牌、功能全面的Web服务器。
-
特点:
-
模块化设计 :通过加载不同的模块(如
mod_php
,mod_ssl
)来扩展功能。 -
多种处理模型:如Prefork(多进程)、Worker(多进程多线程),兼容性和稳定性好。
-
.htaccess 分布式配置:非常灵活,尤其在虚拟主机共享环境中。
-
-
应用场景:
-
传统LAMP(Linux + Apache + MySQL + PHP)架构的核心。
-
需要高度自定义和模块化功能的场景。
-
共享主机托管服务。
-
Nginx vs. Apache 简单对比:
-
高并发:Nginx在处理大量静态并发请求时通常性能更好,资源更省。
-
动态内容 :Apache通过模块(如
mod_php
)在内部处理动态语言,而Nginx通常需要转发给后端处理器。 -
配置 :Apache的
.htaccess
更灵活,Nginx的配置更集中、语法更简洁。
二、应用服务器 / 运行时环境
负责执行应用程序的业务逻辑,处理动态内容。
1. Tomcat
-
功能类型:轻量级的Java Servlet容器和JSP服务器。
-
特点:开源、免费,是Java EE(现Jakarta EE)规范的经典实现。
-
应用场景:
-
运行基于Servlet、JSP的Java Web应用程序。
-
中小型Java项目的首选应用服务器。
-
2. Spring Boot (内嵌Tomcat/Netty)
-
功能类型:Java应用框架,但内置了Web服务器。
-
特点:开箱即用,简化了基于Spring的应用程序的开发和部署。
-
应用场景:
-
现代微服务架构中的Java服务。
-
快速开发RESTful API。
-
3. Node.js
-
功能类型:JavaScript运行时环境,基于Chrome V8引擎。
-
特点:事件驱动、非阻塞I/O模型,适合I/O密集型应用。
-
应用场景:
-
实时应用(如聊天室、在线游戏)。
-
I/O密集型的前后端分离架构(BFF - Backend for Frontend)。
-
全栈JavaScript开发。
-
4. uWSGI / Gunicorn
-
功能类型:WSGI(Web Server Gateway Interface)服务器,用于运行Python Web应用。
-
特点:作为应用服务器,桥接Nginx/Apache和Python框架(如Django, Flask)。
-
应用场景:
-
在Nginx后运行Django或Flask应用。
-
典型的部署栈:
Nginx + uWSGI/Gunicorn + Django
。
-
三、数据库服务器
负责数据的存储、管理和查询。
1. MySQL / MariaDB
-
功能类型:关系型数据库。
-
特点:开源、流行、社区活跃、性能稳定。MariaDB是MySQL的一个分支,完全兼容并增加了新特性。
-
应用场景:
-
绝大多数Web应用的数据存储,是LAMP/LEMP栈的核心。
-
需要事务支持、结构化数据的场景。
-
2. PostgreSQL
-
功能类型:功能强大的开源关系型数据库。
-
特点:支持更复杂的SQL查询、窗口函数、JSON支持好,被誉为"最先进的开源关系数据库"。
-
应用场景:
-
对数据完整性、复杂查询、GIS(地理信息系统)有高要求的应用。
-
替代Oracle等商业数据库。
-
3. Redis
-
功能类型:内存中的数据结构存储,常用作数据库、缓存和消息中间件。
-
特点:数据存储在内存中,读写速度极快,支持丰富的数据结构(字符串、哈希、列表、集合等)。
-
应用场景:
-
缓存:缓存数据库查询结果、会话(Session)存储。
-
排行榜/计数器:利用其原子操作。
-
消息队列:使用Pub/Sub或List结构。
-
分布式锁。
-
4. MongoDB
-
功能类型:文档型NoSQL数据库。
-
特点:以类JSON的BSON格式存储数据,模式自由,易于扩展。
-
应用场景:
-
存储非结构化或半结构化数据。
-
快速迭代开发的业务,因为模式可变。
-
日志分析、内容管理系统。
-
四、消息队列 / 消息中间件
用于在应用之间进行异步通信、解耦服务和削峰填谷。
1. RabbitMQ
-
功能类型:实现了AMQP(高级消息队列协议)的开源消息代理软件。
-
特点:支持多种消息协议,消息可靠性强,功能全面(如消息确认、持久化、路由灵活)。
-
应用场景:
-
对消息可靠性要求高的场景,如金融、订单系统。
-
复杂的消息路由需求。
-
2. Apache Kafka
-
功能类型:分布式流处理平台。
-
特点:高吞吐量、持久化日志、水平扩展能力强。它更像一个"事件流平台"。
-
应用场景:
-
实时数据流处理:如用户行为追踪、日志聚合。
-
微服务间的异步通信。
-
构建数据管道,将数据从源系统移动到数据湖或数据仓库。
-
五、其他关键中间件
1. Elasticsearch
-
功能类型:分布式、RESTful风格的搜索和分析引擎。
-
特点:基于Lucene,可以近乎实时地存储、搜索和分析大量数据。
-
应用场景:
-
网站或App的搜索功能(如电商商品搜索)。
-
日志和指标分析(常与Logstash、Kibana组成ELK栈)。
-
2. Etcd / Consul
-
功能类型:分布式、高可用的键值存储,用于服务发现和配置管理。
-
特点:提供强一致性的数据存储,常用于集群环境中。
-
应用场景:
-
微服务架构中的服务注册与发现。
-
分布式系统的配置中心。
-
Kubernetes使用Etcd作为其后台存储所有集群数据。
-
六、典型架构组合示例
-
经典Web应用 (LEMP/LAMP):
-
Linux + Nginx/Apache + MySQL/MariaDB + PHP/Python
-
场景:传统企业官网、内容管理系统(如WordPress)。
-
-
Java Web应用:
-
Linux + Nginx + Tomcat + MySQL + Redis
-
流程:Nginx处理静态请求并做反向代理,将动态请求转发给Tomcat集群,Tomcat从MySQL读数据,用Redis做缓存。
-
-
微服务架构:
-
Linux + Nginx (API Gateway) + Spring Boot (微服务) + MySQL/PostgreSQL (数据存储) + Redis (缓存/会话) + RabbitMQ/Kafka (服务通信) + Etcd (服务发现)
-
场景:大型互联网平台,如电商、社交网络。
-
-
实时数据平台:
-
Linux + Kafka (数据流) + Flink/Spark (流计算) + Elasticsearch (搜索分析)
-
场景:实时推荐系统、监控告警平台。
-