编码也需要架构思维

架构是各种场景&方案的积累,应用和平衡

问题点

1. 引入新工具或者方案解决问题,却没有考虑到新工具和方案的弊端

2. 性能问题编码前考虑较少,更多部分放在编码后专项解决

3. 编码面向当下需求,而非解决抽象问题

原因分析

1. 人为主观因素,比如:态度消极,得过且过 等。 排除这种原因

2. 对新工具和方案理解不完整,知其然不知其所以然

3. 非功能性需求应该在伴随着系统开发的每个阶段

4. 系统需解决一类问题,而某个问题

解决办法

1. 沉淀新工具和新方案,对典型场景的解决方案进行总结

2. 系统学习和总结容量设计,性能分析和优化思路

3. 如果不是面对一个概念,那么只是解决一个问题,而非一类问题

数据存储

    - 用途:数据存储是算法的基础,合适的存储可以简化算法和提升交互性能

    - 分类:关系型横表,关系型纵表,列式数据库,文档型数据库,时序数据库等

    - 关系数据库横表:宽表和数据冗余解决join的性能问题;乐观锁和悲观锁解决分布式数据处理一致性问题;主从读写分离;横向拆分(如:按照时间维度拆分);纵向拆分(属性冷热不同,基本信息和更多信息)

负载均衡

    - 用途:解决单点不可靠问题

    - 分类:DNS轮询,F5硬件负载均衡,Nginx/Getway软件负载均衡,http调用第三方服务负载均衡,调用第三方中间件的负载均衡,调用DB连接的负载均衡

    - 涉及问题:分流算法(轮询,hash); 存活检测

缓存:

    - 用途:热点数据的访问效率

    - 分类:CDN静态文件缓存;Nginx缓存;服务内缓存;缓存中间件;ORM缓存

    - 涉及问题:预热/冷启动,穿透(访问没有的数据,布隆过滤器),击穿(热点数据过期,差异化过期时间),雪崩(大量热点数据同时过期导致DB负担增加),命中率,数据一致性(更新和淘汰策略),缓存展示和运维

MQ消息队列

    - 用途:解耦,解决组件间处理速度不一致问题

    - 发送消息类型:异步发送消息(不可靠); 事务消息(同步等待MQ持久化); 消费后回调; 广播消息(所有Customer都可消费)

    - 消费消息类型:及时消费;延迟消费(延迟消息); 顺序消息(消费和生成顺序一致)

    - 涉及问题:消息去重;处理消息幂等

分布式:

    - 用途:解决单点故障,单点容量问题

    - 组件分类:网关,服务治理(服务注册和发现,Eureka ),ID生成器(重复,有序),负载均衡

    - 典型问题:分布式事务数据一致性问题;分布式锁(等待,有序,过期时间);服务拆分依据(DDD); 部署灰度升级问题(DB升级和服务灰度升级,向前兼容);定时任务; MyCAT&动态数据源

    - 工具:日志收集ELK;链路追踪;

典型场景和方案

    - 权限控制方案:RBAC模型(用户--角色--权限);SSO单点登录;OAuth2

    - 流控方案:令牌桶(Token bucket)

    - 摘要算法:保证数据没有被篡改,MD5算法,单向不可逆;

    - 短网址系统

    - 工作流&状态机设计和使用: 

    - 异步替换同步方案:

    - 站内消息:webSocket

    - 秒杀场景

    - 批量处理和流处理

    - 站内检索:MySQL like;索引;ES

    - 日志收集:单系统写日志(1S写一次/1M写一次);ELK

    - 即时消息

  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: 成为一名 Golang 架构需要掌握的技能包括:熟练掌握 Golang 语言的基础知识;熟悉 Golang 应用程序的构建;具备良好的编码能力;了解 Golang 常用的 Web 框架;熟悉分布式系统概念及架构;具有高可用架构设计能力;了解常用的数据库及缓存;具备良好的调试和性能优化能力。 ### 回答2: 作为Golang架构师,必备的技能主要包括以下几个方面。 首先,深厚的Golang编程基础是必不可少的。作为一门编程语言,Golang具有简洁、高效的特点,因此熟练掌握Golang的基本语法和编程范式,能够灵活运用Golang的各种特性和库,是架构师必须具备的基本技能。 其次,设计和构建分布式系统的能力是重要的技能之一。在当今云计算和大数据时代,分布式系统成为了架构师必须面对的挑战。掌握分布式系统的设计原则,了解分布式系统的常见模式和技术栈,能够使用Golang构建高可用、高并发、可扩展的分布式系统,是架构师必备的技能之一。 此外,良好的系统设计能力和架构思维也是不可或缺的。架构需要能够对系统进行全局的规划和设计,考虑系统的可靠性、可扩展性、性能等方面。通过分析和抽象复杂的问题,采用合适的模式和架构风格,将系统划分为不同的模块和组件,并定义它们之间的交互和通信方式,以实现系统的复杂需求。 另外,熟悉常用的开发工具和框架也是必备的技能之一。如Docker、Kubernetes等容器和容器编排工具,如gin、beego等Golang框架,如ELK、Prometheus等监控和日志分析工具等。熟悉这些工具和框架,能够帮助架构师更高效地构建和部署系统。 最后,良好的沟通和团队合作能力也是Golang架构师必不可少的技能。架构师通常需要与产品经理、开发团队、测试团队等进行有效的沟通和协作,了解需求和业务,提供技术方案和指导。同时,能够与团队成员密切合作,共同完成项目的设计和开发。 总之,作为Golang架构师,需要具备扎实的Golang编程基础、分布式系统设计能力、系统设计和架构思维、熟悉开发工具和框架,以及良好的沟通和团队合作能力。 ### 回答3: golang架构师必备技能包括以下几个方面: 1. 熟练掌握Golang语言:作为Golang架构师,首先需要对Golang语言有深入的理解和掌握。这包括了对Golang语法、特性、标准库的熟悉,以及对并发编程、内存管理等方面的了解。只有对Golang语言的熟悉,才能使用它来构建可靠、高效的系统。 2. 深刻了解分布式系统设计:架构需要有扎实的分布式系统设计知识和经验,包括分布式计算、分布式存储、分布式消息传递等方面。对于Golang架构师来说,熟悉Golang在分布式系统中的特性和优势,能够合理地应用Goland来设计和开发分布式系统,提高系统性能和可扩展性。 3. 掌握常用的系统设计模式:架构需要了解和掌握常用的系统设计模式,包括但不限于单例模式、工厂模式、观察者模式、代理模式等。这些模式能够帮助架构师更好地设计系统结构,提高系统的可维护性和可扩展性。 4. 熟悉微服务架构:微服务架构是一种将系统拆分成若干小的、自治的服务的架构风格。Golang架构需要熟悉微服务架构的原理和设计思想,并且能够使用Golang来实现和部署微服务。熟练掌握微服务架构可以提高系统的灵活性、可扩展性和可维护性。 5. 具备高可用和高性能系统设计能力:架构需要具备设计高可用和高性能系统的能力。这包括对系统性能的监控和优化、负载均衡、容错处理等方面的知识。Golang作为一门高性能的语言,架构需要了解Golang的性能优化技巧,使用Golang构建高可用和高性能的系统。 总之,作为Golang架构师,不仅需要熟练掌握Golang语言,还需要具备分布式系统设计、系统架构设计、微服务架构等方面的知识和经验,才能设计和构建出高效、可靠的系统。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

闲猫

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值