Anduin Xue
Anduin Xue

Anduin's Tech Blog

All Posts in 2020.5


微信的架构是如何实现分布式消息分发?

微信作为生活中不可或缺的通讯工具,其架构设计之巧妙令人称赞。本文探讨了微信如何通过分布式架构实现高效的消息分发。文章首先提出了一些关于微信的疑问,例如需要手机扫码登录PC端、切换设备后无法同步聊天记录等,然后通过深入分析微信的架构设计,解释了这些现象背后的原因。 文章提出,微信采用了分布式应用架构,其服务器遍布全球各地,没有中心化的服务器。为了实现分布式通讯,微信至少需要设计三个算法:服务器选择算法、服务器端切换算法和用户发现算法。这三个算法共同保证了用户能够快速定位到合适的微信服务器并进行通信。 分布式架构的设计带来了许多好处,例如运维上的便利、对单台服务器生命的弱化、国际化应用的支持等。此外,文章还通过类比Email的通信过程,解释了微信群聊、文件传输等功能的实现原理。 最后,文章指出许多产品经理可能无法理解微信架构设计的复杂性,而盲目模仿或吐槽微信的槽点。实际上,微信的设计非常精巧,为用户提供了高效便捷的通讯体验。然而,这种设计也存在一定的局限性,有些功能并非程序员脑残,而是数据结构本身无法支撑。因此,产品经理在设计产品时,需要更深入地了解技术架构,避免提出不切实际的需求。--GPT 4

Web WeChat Distributed Messging IM

Download any Azure Media Service video or live stream with FFmpeg.

本篇博客为您提供了一个关于如何下载任意Azure媒体服务视频或直播流的教程。在开始之前,您需要安装FFmpeg,无论您使用的是Windows、Linux还是Mac OS。您可以在此处下载最新的FFmpeg:[https://ffmpeg.org/download.html](https://ffmpeg.org/download.html)。 安装完成后,准备如下命令: ffmpeg -protocol_whitelist file,http,https,tcp,tls,crypto -i "{0}" -c copy video.mp4 接下来,您需要获取所观看视频的Azure媒体服务平滑流URL。通常,此URL以“`manifest`”结尾。例如: https://amssamples.streaming.mediaservices.windows.net/3b970ae0-39d5-44bd-b3a3-3136143d6435/AzureMediaServicesPromo.ism/manifest 要下载此内容,请首先将其附加为m3u8格式。在URL的末尾附加以下项目: (format=m3u8-aapl-v3) 现在,URL应该如下所示: https://amssamples.streaming.mediaservices.windows.net/3b970ae0-39d5-44bd-b3a3-3136143d6435/AzureMediaServicesPromo.ism/manifest(format=m3u8-aapl-v3) 现在将URL替换为第一步中的命令`{0}`。 ffmpeg -protocol_whitelist file,http,https,tcp,tls,crypto -i "https://yourdomain/manifest(format=m3u8-aapl-v3)" -c copy video.mp4 最后,执行生成的命令。您的视频将作为文件video.mp4下载。 通过本篇博客,您将学会如何使用FFmpeg轻松下载Azure媒体服务中的视频或直播流。那么,这个方法是否适用于其他流媒体服务呢?如何优化下载速度和质量?探索这些问题,找到答案,尽情享受您的视频下载之旅...--GPT 4

Azure Media Player bash Azure Azure Media Service Download FFmpeg

EF second layer cache to enhance your SQL database performance based on Redis

本篇博客介绍了如何使用基于Redis的EF第二层缓存来提高SQL数据库性能。首先,安装`EFCoreSecondLevelCacheInterceptor`包,然后在`StartUp`类的`ConfigureServices`方法中进行相应的配置。这个缓存会在通过使用这个库的DbContext更改实体(插入、更新或删除)时更新。如果数据库通过其他方式(如存储过程或触发器)更新,缓存将变得过时。但是,如果我们的应用程序在多个实例中运行,数据库的更改可能不适用于其他实例,可能会导致许多问题。此时,我们需要使用Redis来存储缓存。 Redis是一种开源(BSD许可)的内存数据结构存储,用作数据库、缓存和消息代理。本文介绍了三种安装Redis的方法,分别是在Redis官网下载安装、在Windows Server上安装及在Azure上创建Redis缓存实例。安装完成后,使用命令安装`EasyCaching.Redis`包,并修改`StartUp`方法以连接Redis数据库并使用Redis存储Entity-Framework Core的缓存,支持扩展。 此外,还需在`appsettings.json`文件中添加正确的Redis连接信息。这样,在启动过程中,应用程序将尝试连接到Redis数据库,并使用Redis缓存数据库结果。在不修改代码的情况下,ASP.NET Core应用程序的性能得到了极大的提升。Redis值得称赞! 那么,如何在多实例应用程序中保持可扩展性呢?使用Redis作为缓存存储是否足够满足我们的需求?在实际应用中,我们可能还需要关注其他性能优化策略。--GPT 4

ASP.NET Core C# SQL Server SQL Entity Framework Core Azure Redis Caching Cache

软件定制行业为何应当发展软件订阅制?

在当前软件定制行业中,普遍存在的问题是软件质量低劣、漏洞百出,对企业的扩展和用户体验造成严重影响。这主要是由于现行的商业采购模式导致的,而发展软件订阅制可能是解决这一问题的有效途径。订阅制意味着甲方按时间和用量付费,购买软件的使用权和保证软件可用性的服务,而非购买整个软件源码的知识产权。这将有助于改善乙方的开发流程,提高软件质量,降低甲方的风险,并且对双方都有更大的利益。 订阅制的软件定价可以更加灵活,降低甲方的初期试错成本,有助于乙方扩展市场。此外,乙方需要靠精准的定价来保证稳赚不赔,实现企业的健康发展。以微软的Office 365为例,采用订阅制销售,使得普通用户更容易接受,同时提供优异的技术支持和高软件可用性。 尽管订阅制在宏观和微观层面上具有诸多优势,但也存在一些问题,如数据安全、财务资产申报等方面的挑战。然而,随着越来越多的软件开发企业开始向服务转型并取得成功,订阅制将成为软件定制行业的主流和未来趋势。我们有理由相信,这将显著提高各行各业的IT服务质量。那么,订阅制是否真的能够改变软件定制行业的现状?企业如何应对订阅制带来的挑战?这些问题值得我们深入思考。--GPT 4

DevOps China Software Development SaaS Subscription

在前端哈希密码是否是个不错的方案?

在这篇博客中,作者探讨了在前端哈希密码是否是一个不错的方案。文章首先指出,将密码哈希后存入数据库是为了防止运维人员直接查看密码,但如果将哈希过程放在前端完成,则对服务器来说,它实际上只是做了一次明文比较,这样运维人员仍然可以直接调用登录API获取账号权限。 文章接着讲述了腾讯公司的QQ在十几年前曾采用两趟哈希的做法来解决密码明文传输和运维人员登录问题。然而,这种做法实际上对防范中间人攻击并没有帮助,因为只要能抓到的包,就是能伪造的包。 作者回顾了当时网络安全状况较差的年代,例如ARP欺骗和中间人攻击等手段容易实现。然而,在RSA算法普及后,中间人攻击几乎不可能成功。如今,开发Web应用只需借助TLS,将密码原文直接发送给服务器就已经相当安全。 然而,我们仍然不能完全信任HTTPS,因为除了通信层面的防窃取,还存在许多其他攻击手段,例如浏览器插件可以直接阅读网页表单,以及假冒网页诱导用户输入密码等。文章最后指出,要真正解决这些问题,仅靠安全措施和算法远远不够,还需要提高普通用户的警觉性和判断能力,以及对基础安全领域的常识。 在这个背景下,我们不禁要思考:前端哈希密码真的是一个好的解决方案吗?如何在保护用户隐私的同时,确保网络安全?这些问题值得我们深入探讨。--GPT 4

Security Password Hash

Get unique random numbers in C#

本篇博客介绍了如何在C#中生成唯一的随机数。作者首先构建了一个简单的素数检测方法,并通过该方法生成一个素数序列。接着,编写了一个检测E值是否正确的方法,以及从自然数中找到有效E值的方法。在此基础上,作者实现了将输入值N分解为两个素数P和Q的方法,并通过P和Q得到有效的D和E值。 为了检验所得到的P、Q、D和E值是否有效,作者编写了一个函数,该函数在获取正确的P、Q、D和E值时返回true,失败时返回false。最后,通过调用I ^ d % N来生成随机数序列。由于输入的N值可能无效,因此还需要跳过所有无效输入并找到其附近的最近N值。 博客中提供了一个完整的示例,展示了如何使用这些方法生成唯一的随机数。通过运行示例,我们可以看到输出的随机数序列既随机又唯一。这种方法在需要生成不重复随机数的场景中非常有用。 那么,这种生成随机数的方法是否有局限性?在实际应用中,我们可能需要考虑性能和效率问题。此外,是否有其他更简洁或者更通用的方法来生成唯一随机数呢?在阅读本文后,希望读者能够对这些问题进行思考并尝试寻找答案。--GPT 4

C# .NET Core Algorithm Random Numbers Unique random Non-repeat Random