最近,一场激烈的攻防大战在网络世界悄然上演。

主角不是什么国家安全局或者黑客组织,而是一家名不见经传的创业公司——TablePlus

DDoS 攻击者们摩拳擦掌,跃跃欲试。他们从四面八方蜂拥而至,誓要用数亿次请求把 TablePlus 的服务器挤爆、搞垮。特别是那些来自德国和英国的流量,简直有如滔滔洪水,一泻千里。短短5天内,他们就发起了 8000 多万次下载请求,妄图耗尽 TablePlus 的带宽和计算资源。

面对这场声势浩大的入侵,TablePlus 的小伙伴们该怎么办?他们会惊慌失措,向 Cloudflare 求救吗?会忙着屏蔽 IP,关闭服务吗?

答案竟然是:啥也不干,该吃吃该喝喝,好似根本没发生什么大事儿。要不是 CPU 偶尔从 0%蹦到 1%,服务器都要怀疑自己是不是患上了 “分离性身份识别障碍”。TablePlus 家的服务器个个身经百战,这点小打小闹根本不放在眼里。

这帮子大胆的家伙,究竟是从哪儿来的底气?

这种淡定,源自 TablePlus 在架构设计上的独特选择——单体应用。与当下流行的微服务架构不同,TablePlus 选择将所有功能集中在一个服务中,包括 API、网站前端、支付等等。这种 “大一统” 的架构虽然看似简单,但却有着不可小觑的优势。

别人为微服务、容器、编排操碎了心,TablePlus 只需一个二进制文件,拿来就上。

为了最大化单体应用的性能,TablePlus 在技术选型上颇下了一番功夫。他们选择了 Golang 和 Rust 这两种高性能语言作为主要开发工具。凭借着这两门语言出色的并发处理能力和内存管理机制,单个 TablePlus 服务就能轻松应对数十亿的请求。

但光有优秀的语言还不够,TablePlus 在软件工程的各个方面也精益求精,力求将单体服务的性能发挥到极致。

他们会对关键数据库建立索引,提升查询效率;

对核心数据库和非核心数据 (如日志) 进行分离存储,确保主要业务不受影响;

使用 Nginx 作为反向代理,灵活调度和分发请求;

借助 Cloudflare 提供的 CDN、SSL 等功能,进一步提升性能和安全性。

精心打造的单体服务,再加上优化到位的部署环境,让 TablePlus 拥有了一套简洁而高效的架构。在高并发场景下,这套架构展现出了惊人的性能,即便面对 DDoS 攻击也从容不迫。

当然,功夫再高也怕菜刀。再厉害的服务,也得琢磨怎么用起来。在部署方面,TablePlus 同样追求简单和高效。他们充分利用了 Golang 和 Rust 的特性,将服务编译成单个二进制文件,然后直接在 Linux 服务器上运行。这种 “无依赖” 的部署方式,不仅简化了运维工作,也最大限度地发挥了服务器的性能。

TablePlus 的工程师们还利用 Linux 的 Systemctl 来管理服务进程,实现了自动重启、监控等功能,进一步提高了系统的可靠性。相比动辄上百个微服务的复杂架构,TablePlus 的部署可谓简单到了极致。

就这样,TablePlus 凭借精心设计的单体应用架构和极简部署,将系统性能和效率提升到了一个新的高度。面对 DDoS 攻击,他们从容应对,展现出了架构设计的威力。

什么容器、VM、编排,在 TablePlus 面前都成了花拳绣腿,不值一提。

有了单体应用真经护体,TablePlus 在 DDoS 攻击面前自若从容。数亿请求来了,系统服务扛得住;流量再猛,Cloudflare 顶得住;就算攻击再升级,单体架构依然屹立不倒。

这个故事告诉我们,任何事物都有它的两面性。单体应用看似简陋,但在特定场景下也能一展其威风。键是要根据自身业务特点,因地制宜,扬长避短,就像 TablePlus 这般,知己知彼,百战不殆。

在这个讲究 “敏捷”、“弹性” 的年代,TablePlus 的 “单刀赴会” 无疑有些悲壮。但他们用自己的实际行动告诉世人:做好架构,管它单体还是微服务;强调性能,其他都是浮云

这个故事也提醒我们,技术从来就不是非黑即白的。评判一项技术的好坏,不能脱离具体的应用场景。适合自己的,才是最好的。保持开放和创新的心态,拥抱变化,我们才能在瞬息万变的技术浪潮中,找准自己的定位。

微服务固然潮流,但单体应用也自有其存在的理由。关键是找准定位,扬长避短,让优势最大化。

就像 TablePlus 这样,当别人还在追逐时髦时,他们已经悄悄登上了性能的巅峰。这种 “逆势而为” 的勇气和智慧,值得我们每个人思考和学习。

我们正在被 DDoS 攻击,但是我们啥也不干,随便攻击...的更多相关文章

  1. DDOS、CC、sql注入,跨站攻击防御方法

    web安全常见攻击解读--DDos.cc.sql注入.xss.CSRF 一,DDos https://www.cnblogs.com/sochishun/p/7081739.html#4111858 ...

  2. 中间人攻击工具mitmf(另类的XSS注入攻击)

    中间人攻击工具mitmf(另类的XSS注入攻击) (一)简介 (二)安装 (三)结合beef使用 (一)简介 Mitmf 是一款用来进行中间人攻击的工具.它可以结合 beef 一起来使用,并利用 be ...

  3. web攻击之八:溢出攻击(nginx服务器防sql注入/溢出攻击/spam及禁User-agents)

    一.什么是溢出攻击 首先, 溢出,通俗的讲就是意外数据的重新写入,就像装满了水的水桶,继续装水就会溢出,而溢出攻击就是,攻击者可以控制溢出的代码,如果程序的对象是内核级别的,如dll.sys文件等,就 ...

  4. 在Nginx 配置防止单IP 攻击频次的控制 和 大流量攻击

    nginx可以通过HttpLimitReqModul和HttpLimitZoneModule配置来限制ip在同一时间段的访问次数. HttpLimitReqModul用来限制连单位时间内连接数的模块, ...

  5. 如何使用Nginx对抗DDoS攻击?

    时不时的就有客户会被DDoS一下.很多时候攻击很简单也容易封堵,但是攻击的目标是应用的时候就更难防御.在这里云端卫士介绍一下使用Nginx作为代理过滤器来封堵一些这种攻击. Apache DDoS攻击 ...

  6. 实战录 | 一起唠唠那些常见的DDoS攻击

    <实战录>导语 云端卫士<实战录>栏目定期会向粉丝朋友们分享一些在开发运维中的经验和技巧,希望对于关注我们的朋友有所裨益.本期分享人为云端卫士系统架构师高鹏,将带来常见的DDo ...

  7. 分布式拒绝服务攻击 DDoS

    分布式拒绝服务(DDoS:Distributed Denial of Service)攻击指借助于客户/服务器技术,将多个计算机联合起来作为攻击平台,对一个或多个目标发动DDoS攻击,从而成倍地提高拒 ...

  8. 浅谈DDOS攻击

    preface 做过网站运维的同事来说,绝对遇到过DDOS的攻击吧,这样的攻击实属令人头疼,那么今年就说DDOS的攻击与防护吧. 原理 DDOS(Distributed Denial Of Servi ...

  9. 浅谈Ddos攻击攻击与防御

    EMail: jianxin#80sec.comSite: http://www.80sec.comDate: 2011-2-10From: http://www.80sec.com/ [ 目录 ]一 ...

  10. DDOS攻击原理及防护方法论

      从 07年的爱沙尼亚DDOS信息战,到今年广西南宁30个网吧遭受到DDOS勒索,再到新浪网遭受DDOS攻击无法提供对外服务500多分钟. DDOS愈演愈烈,攻击事件明显增多,攻击流量也明显增大,形 ...

随机推荐

  1. Vue+SpringBoot+ElementUI实战学生管理系统-7.专业管理模块

    1.章节介绍 前一篇介绍了院系管理模块,这一篇编写专业管理模块,需要的朋友可以拿去自己定制.:) 2.获取源码 源码是捐赠方式获取,详细请QQ联系我 :)! 3.实现效果 专业列表 修改专业 4.模块 ...

  2. base::AtExitManager 和 base::Singleton 的结合使用

    单例模式(Singleton)也称为单件模式,其意图是保证一个类仅有一个实例,并提供一个访问它的全局访问点,该实例被所有程序模块共享.有很多地方需要这样的功能模块,如系统的日志输出,GUI 应用必须是 ...

  3. C++ 使用 UTF8 BOM 替换 UTF8 文件

    void Utf8ToUtf8Bom(const wchar_t* filename) { std::ifstream infile; std::string strline; std::string ...

  4. docker 发布.net core 项目(linux)

    一.准备阶段:前提:一台linux系统,安装好了Docker并启动 1.上传.netcore项目压缩文件 2.解压 注:若没有解压软件,先下载rar解压软件再安装:需注意系统是64位还是32   (下 ...

  5. kotlin协程小记

    转载请标明出处:https://www.cnblogs.com/tangZH/p/16849169.html -[kotlin协程小记]-[协程的async使用]- [kotlin协程异常处理之-tr ...

  6. Java //输入两个正整数m和n,求其最大的公约数和最小公倍数//12和20的最大公约数是4,最小公倍数是60

    1 //输入两个正整数m和n,求其最大的公约数和最小公倍数 2 //12和20的最大公约数是4,最小公倍数是60 3 4 Scanner scan = new Scanner(System.in); ...

  7. 【5分钟】W10 64bit系统本地安装postgresql 11

    1.下载 官网下载地址 2.安装 一路默认,有一个选语言的可以选中chinese simple(中文简体). 3.初始化 1)进入bin:   cd C:\Program Files\PostgreS ...

  8. 函数指针 int (*add)( )

    原文 首先它是一个指针,一个指向函数的指针,在内存空间中存放的是函数的地址: int Add(int x,int y) { return x+y; } int main() { printf(&quo ...

  9. vscode 切换主侧栏可见性 原Ctrl+B 我改为了 Alt+P

    vscode 切换主侧栏可见性 原Ctrl+B 我改为了 Alt+P ctrl+b 总是想不起来

  10. php time 时间 前台拿到 需要*1000能正确显示 dayjs(time*1000).format('YYYY-MM-DD HH:mm:ss')

    php time 时间 前台拿到 需要1000能正确显示 dayjs(time1000).format('YYYY-MM-DD HH:mm:ss')