热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

中小企业的架构之道

为什么要谈中小企业的架构之道--------------------------------------------------所有的大公司都是从中小型企业发展起来的如果经的创业环
为什么要谈中小企业的架构之道

--------------------------------------------------

所有的大公司都是从中小型企业发展起来的

如果经的创业环境下中小企业是大多数

中小企业的it现状堪忧

当业务变化时打了太多的补丁程序

当业务发展时系统不断出现各种瓶颈

1、系统出现各种故障、卡顿

2、数据库经常锁死

3、用户法宁网站打不开

4、业务团队或者老板抱怨一搞活动系统就挂掉



谈谈中小企业的现状

--------------------------------------------------

技术团队人数不超过50人

硬件数量20-30台服务器(不同批次、不同品牌)

带宽出口100Mbits(估计也就10Mbyte每秒)

项目耦合度搞(一个站点涵盖了几乎大多数功能)

数据库集中(可能没有主从备份、没有读写分离)

网上看到的bat的技术架构根本无法简单复制

1、部署成和时间严重不足

2、现有代码重构量大

3、技术人员承载力不足



我们应该如何应对?##########

我们的武器库有哪些常规武器

--------------------------------------------------

数据库

1、主从复制

2、读写分离

3、分库分表

4、KV数据库

5、内存数据库

运维层面

1、静态资源分离

2、外部图片缓存

3、Nginx反向代理

4、Docker容器化

5、引入云的伸缩方案

6、负载均衡器

技术改造



内存数据

静态资源分离

消息机制与解耦



谈谈内存数据库

--------------------------------------------------

Redis特别推荐

1、稳定,只要没有内存用满,长时间稳定运行

2、性能出色,单节点轻松承载每秒数千次访问

3、集群,在3.0以后支持集群,容量不再受到局限

4、安全,支持主从、包括一写多读的链条状



Memcached

1、作为缓存性能出色

2、有数据量限制

3、自动淘汰数据



再说说静态资源分离

--------------------------------------------------

故事 or 事故

a、有了微信公众号,已推送活动网页就打不开了;

b、发现我们的出口140Mbps的带宽全满了

c、我们把活动页面里面的图片和js都放到CDN上

d、单量迅速恢复、后续每周活动都在提升



后续改进

1、使用xx来存放商品以及活动的图片跟js文件

2、开发了专门的服务控制所有前后台图片上传直接到cdn上



静态资源分离的本质是流量成本的精细化管理

1、带宽成本

2、业务站点服务器的计算资源成本

3、资源存储的成本



最后讲讲消息机制与解耦

--------------------------------------------------

中小企业面对主要挑战

1、大访问量,峰谷比高,成本压力大

2、业务复杂度,模式太多,请求耗时长

3、故障排查与监控



解决方向

1、伸缩性要强

2、逻辑解耦



回忆下生产者消费者模式

--------------------------------------------------

三个要素

a、生产者(Producer)

b、队列(Queue)

c、消费者(Consumer)



在架构中使用

a、产生事件的服务(Event)

b、消息队列(MessageQueue)

c、处理消息的服务(Handler)



什么是消息机制

--------------------------------------------------

定义消息

|-消息ID,不重复

|-消息名称,区分不同的消息

|-消息体,数据



订阅者

|-不同订阅者

|-订阅者的副本数量



生产者

|-同一个语义只发一个消息

|-消息数据完整



MessageQueue产品

1、MSMQ

2、RabbitMQ Erlang

3、ActiveMQ java主流

4、RocketMQ taobao开源

5、MQS阿里云

6、SQS aws



如果我们不希望那么重,可以基于redis自己写一个

a、消息用kv存储

b、消息id放在队列里



增加订阅者副本来伸缩

--------------------------------------------------

我们说到了提高系统的伸缩性

1、当系统压力增加的时候,我们可以轻松通过增加订阅者的副本数量来增加处理能力

2、善用云服务来提供处理能力,做到快速伸缩

3、有条件可以使用docker减少部署的成本

4、对于可以降级的服务,运用Queue的存储能力来缓冲



服务拆分的无状态的重要性

--------------------------------------------------

意义和优点

1、没有上下午依赖,每个消息都是独立的;

2、经量不依赖本地配置或者资源

3、顺序无关性

4、可随时redo



应对必不可少的公共资源

--------------------------------------------------

a、线程安全

b、数据库访问,要考虑性能

c、避免各种硬件、系统资源



业务场景

--------------------------------------------------

场景一

业务需求

登录

a、风控黑名单

b、业务数据统计

c、用户成长体系



场景二

业务需求

支付

a、支付成功,接到银行callback

|-update payment status

|-callback bizsystem

|-statistics



在支付场景很常见

其实与外部系统的一些状态同步中都很常用

还可以跟schedule服务一起联动



场景三

业务需求

数据库更新

|-update cache

|-duplicate to remote storage



我们用这个做了数据库异地复制



还有哪些需要注意的?



注意事项

--------------------------------------------------

1、通常消息是无序的,有序可以做成本搞

2、对于重要是消息要考虑MQ是否支持持久化

3、如果所有的订阅者都挂了,MQ的存储压力

4、提防丢消息和重复消息

5、此模式下在scale时考虑运维的成本



分享一点架构观念

--------------------------------------------------

1、避免过度设计

2、始终保持精简,精简才能灵活

3、知识积累很重要,但是首先要解决问题。




推荐阅读
  • 为何Serverless将成为未来十年的主导技术领域?
    为何Serverless将成为未来十年的主导技术领域? ... [详细]
  • Linux学习精华:程序管理、终端种类与命令帮助获取方法综述 ... [详细]
  • 从无到有,构建个人专属的操作系统解决方案
    操作系统(OS)被誉为程序员的三大浪漫之一,常被比喻为计算机的灵魂、大脑、内核和基石,其重要性不言而喻。本文将详细介绍如何从零开始构建个人专属的操作系统解决方案,涵盖从需求分析到系统设计、开发与测试的全过程,帮助读者深入理解操作系统的本质与实现方法。 ... [详细]
  • 在Hive中合理配置Map和Reduce任务的数量对于优化不同场景下的性能至关重要。本文探讨了如何控制Hive任务中的Map数量,分析了当输入数据超过128MB时是否会自动拆分,以及Map数量是否越多越好的问题。通过实际案例和实验数据,本文提供了具体的配置建议,帮助用户在不同场景下实现最佳性能。 ... [详细]
  • Go语言实现Redis客户端与服务器的交互机制深入解析
    在前文对Godis v1.0版本的基础功能进行了详细介绍后,本文将重点探讨如何实现客户端与服务器之间的交互机制。通过具体代码实现,使客户端与服务器能够顺利通信,赋予项目实际运行的能力。本文将详细解析Go语言在实现这一过程中的关键技术和实现细节,帮助读者深入了解Redis客户端与服务器的交互原理。 ... [详细]
  • 本文详细介绍了HDFS的基础知识及其数据读写机制。首先,文章阐述了HDFS的架构,包括其核心组件及其角色和功能。特别地,对NameNode进行了深入解析,指出其主要负责在内存中存储元数据、目录结构以及文件块的映射关系,并通过持久化方案确保数据的可靠性和高可用性。此外,还探讨了DataNode的角色及其在数据存储和读取过程中的关键作用。 ... [详细]
  • 利用Redis HyperLogLog高效统计微博日活跃和月活跃用户数
    本文探讨了如何利用Redis的HyperLogLog数据结构高效地统计微博平台的日活跃用户(DAU)和月活跃用户(MAU)数量。通过HyperLogLog的高精度和低内存消耗特性,可以实现对大规模用户数据的实时统计与分析,为平台运营提供有力的数据支持。 ... [详细]
  • IIS 7及7.5版本中应用程序池的最佳配置策略与实践
    在IIS 7及7.5版本中,优化应用程序池的配置是提升Web站点性能的关键步骤。具体操作包括:首先定位到目标Web站点的应用程序池,然后通过“应用程序池”菜单找到对应的池,右键选择“高级设置”。在一般优化方案中,建议调整以下几个关键参数:1. **基本设置**: - **队列长度**:默认值为1000,可根据实际需求调整队列长度,以提高处理请求的能力。此外,还可以进一步优化其他参数,如处理器使用限制、回收策略等,以确保应用程序池的高效运行。这些优化措施有助于提升系统的稳定性和响应速度。 ... [详细]
  • 本书《.NET Core 2.* 开发者指南》是面向开发者的全面学习与实践手册,涵盖了从基础到高级的各个层面。书中详细解析了 .NET Core 的核心概念,包括如何创建 .NET Core 网站,并通过视频教程直观展示操作过程。此外,还深入探讨了 Startup 类的作用、项目目录结构的组织方式以及如何在应用中使用静态文件等内容。对于希望深入了解 .NET Core 架构和开发技巧的开发者来说,本书提供了丰富的实践案例和详尽的技术指导。 ... [详细]
  • 本课程首先介绍了全栈开发的最后一公里为何重要,并详细探讨了搭建线上生产环境的关键步骤。随后,通过五个本地Node.js项目的实战演练,逐步展示了从快速构建纯静态简易站点到复杂应用的全过程,涵盖了环境配置、代码优化、性能调优等多方面内容。 ... [详细]
  • Redis客户端使用指南与学习笔记
    本书基于Redis 3.0版本编写,虽然与后续版本存在一些差异,但仍详细介绍了Redis服务器的一对多客户端连接机制。书中不仅涵盖了基本的安装配置和命令操作,还深入探讨了数据结构、持久化策略及性能优化等高级主题,适合初学者和进阶用户参考学习。 ... [详细]
  • 本文详细介绍了使用响应文件在静默模式下安装和配置Oracle 11g的方法。硬件要求包括:内存至少1GB,具体可通过命令`grep -i memtotal /proc/meminfo`进行检查。此外,还提供了详细的步骤和注意事项,确保安装过程顺利进行。 ... [详细]
  • 开发心得:利用 Redis 构建分布式系统的轻量级协调机制
    开发心得:利用 Redis 构建分布式系统的轻量级协调机制 ... [详细]
  • NoSQL数据库,即非关系型数据库,有时也被称作Not Only SQL,是一种区别于传统关系型数据库的管理系统。这类数据库设计用于处理大规模、高并发的数据存储与查询需求,特别适用于需要快速读写大量非结构化或半结构化数据的应用场景。NoSQL数据库通过牺牲部分一致性来换取更高的可扩展性和性能,支持分布式部署,能够有效应对互联网时代的海量数据挑战。 ... [详细]
  • 阿里巴巴Java后端开发面试:TCP、Netty、HashMap、并发锁与红黑树深度解析 ... [详细]
author-avatar
mobiledu2502890777
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有