最新消息

阅读所有最新的博客文章

云端最大化成本节约:如何在没有负载均衡器的情况下运行 Kubernetes
January 18, 2023

云端最大化成本节约:如何在没有负载均衡器的情况下运行 Kubernetes

云原生 Kubernetes 部署中一个主要的成本是每个服务的负载均衡器。每个负载均衡器每月约 15 美元,如果部署有大量 Pod,成本会迅速增加。如果我们告诉你有一种方法可以在无需负载均衡器的情况下运行 Kubernetes,同时获得高可用性和自动故障转移的好处,你会怎么做?本文将探讨如何在云端运行 Kubernetes 而无需负载均衡器,从而节省成本。

版本 1:使用 Cert Manager 的 Nginx Ingress 使用单个负载均衡器

一种节约成本的策略是使用单个负载均衡器为整个集群提供服务,而不是为每个服务使用一个。这可以通过使用 Nginx Ingress 实现,它作为所有外部流量进入集群的唯一入口点。Nginx Ingress 不需要为每个服务创建负载均衡器,而是根据域名将流量分配到相应的 Pod。 最棒的是,如果你安装了 [cert-manager.io/docs/installation/helm/],你将获得免费的 Let’s Encrypt SSL 证书!

使用 Helm 是在集群中部署 Nginx Ingress 的最简单方法:

helm upgrade --install ingress-nginx ingress-nginx \
  --repo https://kubernetes.github.io/ingress-nginx \
  --namespace ingress-nginx --create-namespace

之后,为了确保服务使用 HTTPS 和 SSL,你需要部署 Cert Manager,使用以下命令:

helm install \
        cert-manager jetstack/cert-manager \
        --namespace cert-manager \
        --create-namespace \
        --set installCRDs=true

然后,你需要创建一个“ClusterIssuer”,以便告知 Let’s Encrypt 你的身份。创建一个名为 “clusterissuer.yaml” 的文件,内容根据你的邮箱地址进行调整:

阅读更多
从 WordPress 到无服务器、安全高速的静态网站
June 17, 2022

从 WordPress 到无服务器、安全高速的静态网站

我过去一直在搭建网站,但一直苦于 WordPress 的性能缓慢。如果加载了大量插件,它会需要相当的资源,如果只是在小型服务器上开发想法,这可能会很麻烦。

此外,安全性也是一个问题,作为 33.6% 的网站都在使用 的系统,黑客很容易在其漏洞和问题中找到利用点。 但话又说回来,由于它非常流行,几乎每次都有针对你遇到的问题的插件,这使得它易于使用,并且是一个很棒的“一站式”工具。

想法 1:改进 WordPress 开发

我过去做的事情之一是在本地开发 WordPress(例如,请参阅这篇 AWS 文章 ),然后将结果发布到服务器上。编程和写作速度大大提高,但上传部分却成了问题,因为 WordPress 的链接通常“硬编码”到其使用的 SQL 数据库中。这意味着我所有的链接都指向“https://www.datafotress.cloud”(我的电脑),而不是目标域名。解决这个问题的方法包括在 SQL 中重写你的 URL,或者使用重写 htaccess 规则将“旧”URL 指向“新”URL,但启动过程仍然需要很多努力。

想法 2:在线开发,并外包媒体文件

这个 URL 重写问题很快就让我烦不胜烦,而本地开发对多位开发人员来说并不理想。因此,我决定再次“上云”,并“与云合作”。我遵循的架构是部署一个仅供开发人员访问的开发服务器,并将媒体文件上传到共享存储(AWS S3),最终用户从该存储中提取媒体文件。由于媒体文件(图片、视频等)是 WordPress 的资源消耗最大部分,速度因此大幅提升,此外,在它上面建立 CDN 也很容易,这基本上意味着媒体文件在全球范围内以无限容量部署(基本上是无服务器的)。这意味着,例如,波多黎各的用户不必访问我位于法兰克福的服务器,而是可以访问离他更近的“本地”副本。此外,由于 WordPress 的“重型”部分已经“外包”,因此只需要“小型”服务器来处理 PHP 请求和 WordPress 的“后台”部分。欢迎你在评论区或私信中提出更多问题,或者查看 AWS 的类似方法

使用 AWS 的 WordPress 架构

结合自动缩放技术,这似乎是 WordPress 最理想的设置,并且效果很好。但是…

你仍然需要检查插件更新、安全性和整体监控。即使 AWS 帮助我们使这个架构非常稳定和快速,仍然有很高的运营需求。此外,在服务器上运行单独的开发、数据库、负载均衡等操作可能非常昂贵,特别是对于没有太多用户的网站。 那么,Werner Vogels 在 2015 年 re:invent 大会上说了什么?

“没有比没有服务器更容易管理的服务器了”

Werner Vogels 在 2015 年的 re:invent 大会上

阅读更多
June 8, 2022

使用 MTCNN 进行人脸检测

MTCNN 是一种由 Github 用户 ipacz 编写的 Python (pip) 库,它实现了论文 Zhang, Kaipeng 等人,“使用多任务级联卷积网络的联合人脸检测和对齐”。IEEE 信号处理快讯 23.10 (2016): 1499–1503。Crossref. Web

本文中,他们提出了一种深度级联多任务框架,利用不同“子模型”的特征来增强它们的相关性。

尽管 S3FD 在 GPU 上运行仍然更快,但 MTCNN 在 CPU 上运行速度相当快——但这将是另一个主题。

本文使用了以下两个来源的代码,请查看它们,它们也很有趣:


MTCNN 基本用法


您可以访问以下链接获取完整的笔记本:

https://github.com/JustinGuese/mtcnn-face-extraction-eyes-mouth-nose-and-speeding-it-up

git clone https://github.com/JustinGuese/mtcnn-face-extraction-eyes-mouth-nose-and-speeding-it-up

幸运的是,MTCNN 可作为 pip 包使用,这意味着我们可以轻松地使用以下命令安装它:

pip install mtcnn

现在,切换到 Python/Jupyter Notebook,我们可以通过导入并进行快速验证来检查安装:

import mtcnn
# 打印版本
print(mtcnn.__version__)

之后,我们就可以使用 matplotlib 的 imread 函数 加载测试图像。

import matplotlib.pyplot as plt
# 从文件中加载图像
filename = "glediston-bastos-ZtmmR9D_2tA-unsplash.webp"
pixels = plt.imread(filename)
print("图像/数组形状:", pixels.shape)
imgplot = plt.imshow(pixels)
plt.show()

现在您的输出将如下所示:

阅读更多
May 23, 2022

如何使用 Facebook Prophet 机器学习模型在 AWS Lambda (无服务器) 部署自动化交易机器人

我将这篇文章分为“为什么我要这样做”和“技术实现方法”。如果您想跳过“为什么”部分,可以直接跳到技术部分。

1. 可靠性: 该算法将独立于其他系统、更新等执行。

2. 性能效率: 我可以在单个(小型)系统上运行多个算法,彼此独立。

3. 成本节省: AWS每月允许320万计算秒 ,基本上让我所有算法都能免费运行。

我一直在寻找一种方法,以确保我的投资机器人能够可靠地执行,因为执行失败可能会造成巨额损失,如果交易方向错误,交易未能及时取消。此外,我还想避免让我的电脑一直运行,并确保多个算法能够同时运行,而不影响或延迟彼此的执行。

此外,让投资算法在不担心操作系统更新、硬件故障和断电等问题的情况下运行是很好的想法,这是无服务器技术的通用优势。

我现在可以运行算法的多种变体来测试算法的修改,并确保它一定会运行。另一个好处是?AWS 提供大约 100 万次免费 Lambda 调用,让我可以在免费套餐中运行整个架构。

投资算法

我将在网站 www.datafortress.cloud 的另一篇文章中更深入地解释该算法,但我通常的投资算法设置包括:

  1. 使用 Backtrader ,一个用 Python 编写的开源回测框架,来测试算法
  2. 将成功的算法转换为包含 run() 方法的单个 Python 文件,该方法返回已执行的投资
  3. 将 Python 文件传输到 AWS Lambda,并在其中调用 run() 函数与 AWS Lambda 的 lambda_handler 函数

在这个示例算法中,我会根据当前价格是否高于或低于由 Facebook 的 Prophet 模型 预测的趋势线来做出投资决策。我参考了 Sean Kelley 的想法,他撰写了 Backtrader 设置,说明如何将 Prophet 与 Backtrader 配合使用。

此设置中的股票宇宙是通过从 SPY500 指数中选择过去 X 个时间步长中回报最高的 20 只股票来计算的。

数据来源是雅虎财经,使用 免费的 yfinance 库 ,我的算法经纪人选择的是 Alpaca.markets

阅读更多
Docker Compose vs. Kubernetes vs. 传统托管:如何最好地托管您的应用程序?
February 14, 2022

Docker Compose vs. Kubernetes vs. 传统托管:如何最好地托管您的应用程序?

Docker:轻量级、可移植的应用程序托管方案

Docker:轻量级、概念验证、在一台服务器上运行多个程序

Docker近年来已成为应用程序开发和部署的热门工具。其受欢迎程度与其轻量级和可移植性有关,使其成为托管应用程序的绝佳选择。与传统的虚拟机不同,Docker容器不需要安装完整的操作系统,因此占用的资源更少。该特性还使同一容器可以在不同的环境中使用,从而方便地在开发环境和生产环境之间迁移。此外,Docker容器易于扩展,您可以根据需要添加或删除资源。如果您正在寻找一种经济高效的方式来托管您的应用程序,Docker 可能就是完美的解决方案。

它是一种容器化技术,使开发人员能够在隔离且可移植的环境中创建、打包和分发应用程序。简单来说,它是一种将应用程序及其所有依赖项打包到单个包中的方法,方便地在不同环境之间迁移或在多台服务器上托管。对于首席执行官而言,这意味着Docker可以简化新应用程序的部署,降低基础设施成本,并提高软件的可靠性和安全性。通过使用Docker,您可以轻松地创建和管理容器,确保您的应用程序在任何基础设施上都能持续、可靠地运行。

与传统的虚拟机 (VM) 托管相比,Docker 提供了几个优势。最显著的优势之一是其轻量级和可移植性。Docker容器的尺寸远小于虚拟机,运行所需的资源也更少。这使得它们部署速度更快、管理效率更高,并更容易根据需要进行扩展或缩减。Docker还在应用程序中提供了隔离且标准化的环境,确保它们在不同服务器上运行的方式相同。但是,使用 Docker 也存在潜在的缺点,例如管理容器需要额外的专业知识,以及如果配置不当,可能会存在安全问题。

那么Kubernetes和Docker一样吗?它们有什么区别?

Kubernetes:大规模容器管理的可扩展解决方案

Kubernetes:Docker,但在多台机器上运行。自我修复、安全性、自动化、企业级

Kubernetes是一个流行的开源平台,用于自动化容器部署、扩展和管理。它旨在管理大规模容器化应用程序,提供高度可扩展、可移植和可扩展的平台。Kubernetes已成为容器编排的行业标准,允许组织在多台主机上管理其容器、自动化部署并确保可用性。

该平台通过抽象底层基础设施并提供以容器为中心的应用程序管理方法来工作。这使开发人员更容易部署和管理应用程序,而无需担心底层基础设施。Kubernetes提供了一个高度弹性和自我修复的系统,允许自动故障转移并降低停机风险。

Kubernetes相对于传统的托管解决方案具有许多优势。首先,它具有高度可扩展性,允许组织在多台主机上部署和管理大量容器。这使得组织能够根据需要快速轻松地扩展应用程序。此外,Kubernetes具有高度可移植性,使组织能够在云提供商和本地数据中心之间迁移应用程序,而无需对应用程序进行重大更改。

但是,与传统的托管解决方案相比,Kubernetes的设置和管理可能更复杂。它需要更大的时间和资源投入来设置和管理该平台,并且可能不适合小型应用程序或资源有限的组织。此外,Kubernetes对开发人员来说学习曲线更陡峭,他们需要精通该平台的架构和 API。

总而言之,Kubernetes对于需要管理大规模容器化应用程序的组织来说是一个绝佳的解决方案。它提供了一个高度可扩展、可移植且可扩展的平台,可用于在多台主机上管理容器。但是,组织在决定采用该平台之前应仔细考虑其需求和资源。

VM:传统的托管方案依然稳健

VM:所需知识少,资源使用量高,不稳定

虚拟机 (VM) 已经成为应用程序托管的基础多年,并且仍然是企业可靠且值得信赖的选择。本文将探讨使用虚拟机作为托管解决方案的优点和缺点,并将其与 Docker 和 Kubernetes 等新兴选项进行比较。

使用虚拟机的主要优势在于其稳定性和安全性。每个虚拟机都在其自身隔离的环境中运行,因此一个虚拟机中的任何问题或违规行为都不会影响其他虚拟机。虚拟机还具有高度的可定制性,允许企业创建和配置虚拟机以满足其特定需求。但是,虚拟机可能需要大量资源,需要专用服务器才能运行,并且在响应需求变化时可能难以快速扩展或缩减。

与 Docker 和 Kubernetes 等新兴选项相比,虚拟机可能看起来过时了,但它们仍然有其用途。虚拟机非常适合运行可能与基于新容器的解决方案不兼容的旧版应用程序,并且它们通常比其他托管选项更经济实惠。但是,虚拟机的缺乏可扩展性和敏捷性可能对需要快速部署和频繁更新的企业来说是一个劣势。

总而言之,虚拟机仍然是需要可靠、安全托管方案来运行旧版应用程序或其他特定用例的企业的一个不错的选择。但是,对于寻求更灵活和可扩展解决方案的企业而言,Docker 和 Kubernetes 等新兴选项可能更合适。在选择托管解决方案之前,务必评估企业的具体需求和要求,并仔细权衡每种选项的优缺点。

Docker、Kubernetes 和 VM 在应用程序托管中的优缺点

总结以上发现,我们可以说 Docker 是一个轻量级、可移植的解决方案,它可以在不同的环境中以一致的方式部署应用程序。Docker 的一项关键优势在于其将应用程序隔离和容器化的能力,这提高了安全性及灵活性。此外,由于 Docker 容器非常轻量级,因此可以快速部署,使其成为小型到中型应用程序的绝佳解决方案。

另一方面,Kubernetes 旨在用于大规模容器管理,它是一个可扩展的解决方案,可用于编排跨大量节点的容器化应用程序。Kubernetes 非常适合需要在多个环境中管理大量容器的组织。其关键功能包括负载均衡、自动缩放和自我修复功能,使其成为关键任务应用程序的绝佳解决方案。

最后,传统的虚拟机提供了一个可靠且稳定的应用程序托管方案。虚拟机存在已久,并且深受 IT 专业人士的了解,使其成为关键任务应用程序的安全选择。尽管虚拟机可能不如 Docker 或 Kubernetes 灵活,但它们仍然可以提供良好的性能和可扩展性,使其成为已在技术上投资的组织的绝佳选择。

总而言之,Docker、Kubernetes 和传统虚拟机之间的选择取决于您的具体需求和要求。Docker 非常适合小型应用程序,Kubernetes 旨在用于更大型、更复杂的平台,而传统虚拟机则为关键任务应用程序提供了可靠且稳定的选择。务必仔细权衡每种解决方案的优缺点,并在必要时咨询专家,以确保您为您的组织做出正确的选择。

结论:哪种容器化解决方案适合您的企业?

如果您仍不确定哪种方案最适合您的企业,请不要担心 - DataFortress.cloud 的专家随时为您提供帮助。我们了解每家企业都有独特的需求和要求,并提供个性化的咨询,帮助您为您的具体情况做出最佳决策。无论您是否对 Docker、Kubernetes 还是虚拟机感兴趣,我们都能帮助您确定每种选项的优缺点,并确定哪种方案最适合您的企业。

阅读更多
January 26, 2022

提升用于Python量化交易模型的股票数据

假设你计划构建自己的算法交易模型。

你很可能只使用价格(收盘价)数据来训练你的模型和算法,但很快你就会发现,你的模型表现不佳。

你很快会使用典型的 OHLCV 数据(开盘价、最高价、最低价、收盘价、成交量),这已经有所改进,但模型似乎仍然不够出色。

你能做些什么?

可参考的 Colab 笔记本: https://colab.research.google.com/drive/1ywqti1TuTDY_Z11ry0x4ITclCwxnXAeI?usp=sharing

要点:

https://gist.github.com/JustinGuese/019e0e71100abe6555f78c32fd0b10a9

机器学习交易机器人喜欢什么?

典型的机器学习算法只能处理它获得的数据。它(通常)不能创建新的特征或解释,例如“如果成交量增加,价格的三阶导数上升,价格更有可能上涨”,而是只能“观察”它获得的数据。这些将是诸如“如果价格超过 100 美元,成交量超过 2000,价格更有可能上涨”之类的计算。

机器学习新手现在正在尝试通过训练数十年或使用越来越多的 GPU 来解决这个问题,但一种更高效的方法是为算法提供额外的数据,以便它可以使用更多资源来推断计算。

可以通过以下方式实现:

  1. 获取更多数据(更长的时间跨度)
  2. 添加统计指标
  3. 添加你自己的信号和解释

实践:增强你的数据

第一步 - 获取你的数据

首先,让我们获取一些基本 OHLCV 数据。我喜欢 yfinance 模块,因为它非常简单。它无法与实时数据流相比,但另一方面,它免费且非常适合实验!

pip install yfinance pandas numpy matplotlib ta

导入 yfinance、Pandas、NumPy、Matplotlib 模块

import yfinance as yf
import matplotlib.pyplot as plt
import pandas as pd

获取一些股票数据,间隔和周期指的是时间范围。

interval 接受的值,例如 1m, 2m, 5m, 15m, 30m, 60m, 90m, 1h, 1d, 5d, 1wk, 1mo, 3mo

period 接受的值,例如 1d, 5d, 1mo, 3mo, 6mo, 1y, 2y, 5y, 10y, ytd, max

阅读更多