15分钟从零开始搭建支持10w+用户的生产环境(一)

前言

这是一个基于中小型企业或团队的架构设计。

不考虑大厂。有充分的理由相信,大厂有绝对的实力来搭建一个相当复杂的环境。

中小型企业或团队是个什么样子?

  • 开发团队人员配置不全,部分人员身兼开发过程上下游的数个职责;

  • 没有专职的维护人员,或者维护人员实力不足以完全掌控生产和开发环境。

这种情况下,过于复杂的生产环境设计,规划、安装、调试、修改会牵扯太多的精力。一旦使用过程中出现问题,涉及的技术复杂性会带来不可预估的灾难。

同时,中小型团队的系统,也有其特殊要求,主要表现在:

  1. 生产环境的搭建要简单。这个主要是考虑到人员的技术实力。毕竟要求一个开发人员,能熟练安装各种系统的运行环境,是有点太高了;

  2. 生产环境的扩展性要足够。因为资金原因,通常前期的服务器资源会比较紧张,而一旦有资金进入,用户量会短时间扩大,服务器资源需求也相应扩大,就需要在不改动代码的情况下,通过简单的操作,把生产环境扩展成较大规模的架构;

  3. 需要充分考虑到开发环境与生产环境的衔接。国内大多数开发团队,是采用windows开发,linux布署的模式。这种模式下,开发和生产环境中各个部分的选择尤为重要。最理想的情况,是开发和生产在不同的操作系统下,同环境同代码,避免代码重编译和移植。

本文就是针对这样的要求,进行的设计。

一、服务器的操作系统

Linux。毫无疑问,服务器的操作系统,必须是linux。

很多人选择windows做为服务器操作系统,是因为windows更熟悉,有图形管理界面,比较容易操作。

但实际上,linux做为操作系统的优势更明显:

  1. 命令行跟图形界面,仅是输入方式的区别,从功能上没有实质性的区别;命令行更快捷,而且可以形成命令序列,即脚本。

    装linux一定不要装GUI,这是一个非常重要的习惯,而且会显得很专业

  2. Linux是开源免费的,或接近免费的,既不存在版权问题,也不存在成本问题。

  3. 在相同硬件的情况下,linux更容易获得更高的性能。更容易的意思是,不需要进行太多的配置和调整。在一般使用下,安装完直接使用,性能就很高了。

Linux有很多发行版。通常的选择是Redhat、CentOS、Debian。Redhat是个商业版本,有一定的费用。CentOS、Debian,是免费版本。

中小团队,收费版本就不考虑了。两个免费的版本中,CentOS相对激进点,预装软件会采用比较新的版本,甚至会有测试版本;Debian相对保守,预装的软件都是稳定的版本。另外,CentOS预装的软件比Debian多,所以体积大一些,启动时要加载的东西多一些。

我建议选择用Debian,稳定,占用硬盘小,占用运行内存少。

至于Ubunut、Arch Linux、Mint,学习linux的时候可以好好用,服务器上就算了。如果linux您自己本身不熟悉,就别自找麻烦。

至于linux的内核版本,在购买VPS服务器的时候,镜像都是做好的,没多少可选,用最高版本就好。内核的每个升级,都解决了一些问题,也带来了一些问题。如果不清楚这些问题在哪,或者不知道怎么解决这些问题,就假装不知道。操作系统的问题,包括BUG,包括遗留的内容,我们很难遇到的。

最后多说一句,服务器操作系统一定选择x64的版本,即64位的版本。在服务器上安装应用软件,也要优先选择x64的版本。现在的主流硬件,PC都是x64的,更别说服务器了。

Debian官网:https://www.debian.org

独立的服务器,需要从Debian官网下载ISO进行安装。云服务器,在购买时会先选择安装的镜像。安装的步骤略过,如果需要我可以另开一个贴子写写。

有几个简单的安全方面的内容需要注意:

  1. 远程连接服务器时,一定要用ssh。命令是:

ssh username@ip
ssh username@domain

Windows下没有内建的ssh命令,可以下一个Putty,也要使用ssh模式。

  1. 远程登录时,尽量少用root。安装完成后,建一个普通用户,用这个普通用户进行远程登录。进去后,用su升权或用sudo进行操作。

  2. 上传文件使用ssh通道。命令是:

scp source_file username@ip:~/target_folder/target_file
scp source_file username@domain:~/target_folder/target_file

Windows下可以装一个WinScp来上传文件。

  1. 小心使用网上建议的任何方式来改动服务器,除非你知道你在做什么。

  2. 在绝大多数情况下,自己开发的应用跑在服务器上时,如果服务器出现了CPU高或内存满的情况,去查代码,而不是怀疑服务器如何如何,也不是去调整服务器的运行参数。

(未完待续)

您的赞赏是我最大的鼓励

I will be more solid with your donations

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/309571.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

高性能IO——Reactor模式

高性能IO——Reactor模式 参考:https://cloud.tencent.com/developer/article/1513447 目前的IO线程处理模型一般可以分为以下三类: 单线程阻塞I/O服务模型; while(true) {socket accept();handle(socket) }多线程阻塞I/O服务模型&#xf…

X-lab 开放实验室开源创新的故事

本报告为“开源软件供应链点亮计划暑期2020活动”中的“大咖说开源”第二期的特邀嘉宾视频,正好借此机会给大家介绍下 X-lab 实验室目前在开源方面开展的一些事情,欢迎大家关注,也欢迎更多热爱开源的朋友们加入!摘要:2…

Circle and Points POJ - 1981(单位圆覆盖最多点)

题意: 给你n个点和点的位置,问单位圆最多能覆盖多少个点。 题目: You are given N points in the xy-plane. You have a circle of radius one and move it on the xy-plane, so as to enclose as many of the points as possible. Find h…

ASP.NET Core分布式项目实战(Consent 确认逻辑实现)--学习笔记

任务22:Consent 确认逻辑实现接下来,我们会在上一节的基础上添加两个按钮,同意和不同意,点击之后会把请求 post 到 ConsentController 处理,如果同意会通过 return url 跳转到客户端,如果不同意就会取消&am…

The Last Non-zero Digit POJ - 1150(n!mod p)

题意: 要求你求出n!(n−m)!)\frac{n!}{(n-m)!)}(n−m)!)n!​中最后一个非0的数字. 题目: In this problem you will be given two decimal integer numberN,M. You will have to find the last non-zero digit of the NPM^{N}P_{M}NPM​.This means n…

Istio 1.6——迈向极简主义

从 1.2 版本开始,Istio 进入季度发布的节奏。5 月 21 日发布的 1.6 版本可以说是最准时的一次。我们是否可以理解 Istio 架构简化后的开发工作已经步入了正轨?这次的更新是否会带给我们惊喜?亦或是还有遗憾?让我们一一道来。&…

[Java基础]获取Class类的对象

代码如下: package ClassObjectPack;public class Student {private String name;int age;public String address;public Student(String name, int age, String address) {this.name name;this.age age;this.address address;}public Student() {}private Student(String …

使用PInvoke互操作,让C#和C++愉快的交互优势互补

一:背景1. 讲故事如果你常翻看FCL的源码,你会发现这里面有不少方法借助了C/C的力量让C#更快更强悍,如下所示:[DllImport("QCall", CharSet CharSet.Unicode)][SecurityCritical][SuppressUnmanagedCodeSecurity]private static ex…

[Java基础]反射获取构造方法并使用

代码如下: package ClassObjectPack;import java.lang.annotation.Annotation; import java.lang.reflect.Constructor; import java.lang.reflect.InvocationTargetException;public class ReflectDemo01 {public static void main(String[] args) throws ClassNotFoundExcep…

题目 1886: [蓝桥杯][2017年第八届真题]包子凑数(欧几里得+完全背包)

题目: 时间限制: 1Sec 内存限制: 128MB 提交: 1049 解决: 365 题目描述 小明几乎每天早晨都会在一家包子铺吃早餐。他发现这家包子铺有N种蒸笼,其中第i种蒸笼恰好能放Ai个包子。每种蒸笼都有非常多笼,可以认为是无限笼。 每当有顾客想买X…

[Java基础]反射获取构造方法并使用练习

Student类代码如下: package ClassObjectPack;public class Student {private String name;int age;public String address;public Student(String name, int age, String address) {this.name name;this.age age;this.address address;}public Student() {}private Studen…

Dotnet core使用JWT认证授权最佳实践(一)

最近,团队的小伙伴们在做项目时,需要用到JWT认证。遂根据自己的经验,整理成了这篇文章,用来帮助理清JWT认证的原理和代码编写操作。一、JWTJSON Web Token (JWT)是一个开放标准(RFC 7519),它定义了一种紧凑的、自包含的…

[Java基础]反射获取成员变量并使用

代码如下: package ClassObjectPack;public class Student {private String name;int age;public String address;public Student(String name, int age, String address) {this.name name;this.age age;this.address address;}public Student() {}private Student(String …

2018年蓝桥杯B组题E题+快排

题目&#xff1a; E 快速排序&#xff1a;以下代码可以从数组a[]中找出第k小的元素。 它使用了类似快速排序中的分治算法&#xff0c;期望时间复杂度是O(N)的。 请仔细阅读分析源码&#xff0c;填写划线部分缺失的内容。 #include <stdio.h> int quick_select(int a[],…

Angular SPA基于Ocelot API网关与IdentityServer4的身份认证与授权

在上一讲中&#xff0c;我们已经完成了一个完整的案例&#xff0c;在这个案例中&#xff0c;我们可以通过Angular单页面应用&#xff08;SPA&#xff09;进行登录&#xff0c;然后通过后端的Ocelot API网关整合IdentityServer4完成身份认证。在本讲中&#xff0c;我们会讨论在当…

[Java基础]反射获取成员变量并使用练习

代码如下: package ClassObjectPack;public class Student {private String name;int age;public String address;public Student(String name, int age, String address) {this.name name;this.age age;this.address address;}public Student() {}private Student(String …

基于 abp vNext 和 .NET Core 开发博客项目 - 定时任务最佳实战(一)

上一篇文章使用AutoMapper来处理对象与对象之间的映射关系&#xff0c;本篇主要围绕定时任务和数据抓取相关的知识点并结合实际应用&#xff0c;在定时任务中循环处理爬虫任务抓取数据。开始之前可以删掉之前测试用的几个HelloWorld&#xff0c;没有什么实际意义&#xff0c;直…

题目 2285: [蓝桥杯][2018年第九届真题]螺旋折线(数论+思维)

题目&#xff1a; 题目描述 如图所示的螺旋折线经过平面上所有整点恰好一次。 对于整点(X, Y)&#xff0c;我们定义它到原点的距离dis(X, Y)是从原点到(X, Y)的螺旋折线段的长度。 例如dis(0, 1)3, dis(-2, -1)9 给出整点坐标(X, Y)&#xff0c;你能计算出dis(X, Y)吗&…