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

微观架构和宏观架构论

http:blog.csdn.netjdream314articledetails18041391微观架构和宏观架构论以下内容纯属自己YY,纯属自己更加自己经历有感而

http://blog.csdn.net/jdream314/article/details/18041391



微观架构和宏观架构论


     以下内容纯属自己YY,纯属自己更加自己经历有感而发。希望大家不要较真,如有误导,欢迎拍砖。以下想法和理解仅供参考,还望不要误导。

    一般都知道架构师们总是将问题进行抽象,从而将整个系统搭建在一个抽象基础之上,他们往往会定义一些接口或者实现一些默认机制,然后具体内容交给下面的我们这些码农们。一个好的架构,不是越抽象越好,也不是使用的模式或者规则越多越好,而是简单易懂、结构清晰,不是为了让我们下面一群码农们像雾里看花一样看待他们的架构,这样的架构只能说是为了架构而架构。架构师们很NB,工资高,写的代码少,会议多,整天是各种架构会议、管理会议、组织会议……他们对下面码农们说的最多的就是:我是站在全局看的。这句话听上去感觉是宏观的,但是里面包含两个方面。

    一、微观,站在业务的角度来认识系统的架构,他是一个微观的概念,比如说:一个系统应该包含哪些模块,模块之间的关联关系,系统运用哪些模式或者规则来设计。这些东西都是基于业务来进行设计的。他可以不考虑外部的网络部署,服务器搭建以及外部依赖等因素。这些都只是站在对业务的实现来进行考虑,如何更好的实现对应的业务,从而使得对该业务系统能够更好的支持其扩展性,容错性以及可维护性等等,这就是微观的架构,为何是微观,原因是由于他关注的是业务内部的规则,这种架构依赖了他对应的业务,可能不同的业务那么其架构会有所不同。比如说:现在要实现一个CRM系统,那么架构师站在微观的角度去分析,需要知道CRM系统内部的业务规则,以及各个子业务之间的关联关系,从而可以设计出复合CRM系统所具备的功能。这里所需要首选就是需要了解CRM的业务规则,而不是考虑CRM的其他外部因素。微观之所以微观,是因为它是站在业务内部的细节,而不考虑其外部的环境。

   二、宏观,通过上面微观的分析,应该知道宏观应该是什么内容。宏观的架构,则是站在系统所部署的环境以及外部依赖条件等因素。为何需要考虑这些内容呢?这些不是运维可以搞定的嘛?任何业务的系统都需要一个部署的环境,可以是甲方拟定或者是软件生产商规定,都必须规定一个系统的部署环境。比如说:系统A和系统B之间存在依赖关系,或者可以理解为A需要从B获取信息。AB获取信息可以是被动也可以是主动,这个设计需要考虑AB的部署环境,比如,A是部署在内网而B是部署在外网,那么需要A主动去请求B获取信息,因为A是在内网,没有对外的IPB根本不知道A的存在。所以这个时候在系统架构的时候,没有考虑这个因素,而恰好是设计成为B主动推送给A那么,这个A系统基本上属于瘫痪状态,或者说A系统和B对接模块需要重新设计。这种架构则是站在整个业务范围之外来对整个系统进行考虑,这种架构收到网络架构,外部依赖以及服务器架构等因素的限制。从严格意义上来将,系统应该不要过分依赖于外部因素,特别是服务器。比如:一个系统在设计的时候就对tomcat的管理比较紧密,那么可能在初期发现不了问题,如果当运维升级或者tomcat不是免费了(这个或许不可能),那么当前这个系统就会被绑架式的进行了约束。那么这个时候,需要架构师站在更加宏观的角度去审视整个系统,从系统以后所要生存的环境来看待这个系统而不是简单的实现某个业务逻辑。

    此处例举一个本人经历过的例子来归纳一下上面所描述的宏观和微观架构。Session共享是作为互联网应用应该具备的功能。前段时间,由于项目比较多,每次升级都需要通知客户暂停操作,然后进行重新部署升级,导致运维发布很纠结,用户体验也很蛋疼。于是运维建议做一个session共享的组件,后端进行集群部署,都进行升级的时候,用户将会自动跳转到另一个服务器上进行操作,而无需再次登录。这样可以在用户不停止操作的情况下进行后台升级。于是本人就试着动手做做。已经上面宏观和微观的概念,现在站在微观的角度来进行分析,考虑session共享的具体业务规则,session共享是将用登录的会话信息进行共享,从而在进群部署的环境下面用户可以无缝的跳转与各个后端服务之间。那么这里唯一要做的就是将用户的会换信息进行共享,也就是将会换信息存储在一个公共的存储介质上,本人采用了Redis缓存服务进行存储用户会话信息,则在用第一次登录成功后,将用户的会话信息存储到Redis缓存中,在每个应用中都有一个Filter,过滤用户所有的请求,该Filter做的第一步便是从Redis缓存中获取用户会话信息,如果没有表示之前没缓存过,进行登录操作,否则将缓存的会话信息复制到session中进行后续的操作。基于这种机制可以实现多太服务器的session共享。这个是站在微观的架构,为的是实现这一业务逻辑。

    那么站在宏观来考虑,基于tomcatsession共享有很多插件,这种插件对于部署在tomcat的应用来说可以不需要依赖任何组件和进行任何调整即可以拥有session共享,但是这里就限定了应用部署的环境,必须是tomcat,如果换了新的部署环境,是否有对应的session共享插件这个不可而知。所以基于tomcat来做session共享插件是一个不可取的方式。因为session共享是需要做成一个公共组件,既然是公共组件就不能要求应用在使用该组件时,规定应用部署环境,这就不是公共了。从没看过springstrutshibenate或者是ejb对应用使用的部署环境进行限定吧。

   上面是根据实际情况对宏观架构和微观架构进行了归纳以及演示。虽然真正要实现session共享是不依赖session来进行实现,但是由于当时所有系统确实对session的依赖比较紧密,所以暂时考虑采取上面那种方式进行比较牵强的实现。

以上是全部内容,欢迎拍砖………





推荐阅读
  • 秒建一个后台管理系统?用这5个开源免费的Java项目就够了
    秒建一个后台管理系统?用这5个开源免费的Java项目就够了 ... [详细]
  • Spring Boot 中配置全局文件上传路径并实现文件上传功能
    本文介绍如何在 Spring Boot 项目中配置全局文件上传路径,并通过读取配置项实现文件上传功能。通过这种方式,可以更好地管理和维护文件路径。 ... [详细]
  • Python 数据可视化实战指南
    本文详细介绍如何使用 Python 进行数据可视化,涵盖从环境搭建到具体实例的全过程。 ... [详细]
  • 阿里巴巴终面技术挑战:如何利用 UDP 实现 TCP 功能?
    在阿里巴巴的技术面试中,技术总监曾提出一道关于如何利用 UDP 实现 TCP 功能的问题。当时回答得不够理想,因此事后进行了详细总结。通过与总监的进一步交流,了解到这是一道常见的阿里面试题。面试官的主要目的是考察应聘者对 UDP 和 TCP 在原理上的差异的理解,以及如何通过 UDP 实现类似 TCP 的可靠传输机制。 ... [详细]
  • Web开发框架概览:Java与JavaScript技术及框架综述
    Web开发涉及服务器端和客户端的协同工作。在服务器端,Java是一种优秀的编程语言,适用于构建各种功能模块,如通过Servlet实现特定服务。客户端则主要依赖HTML进行内容展示,同时借助JavaScript增强交互性和动态效果。此外,现代Web开发还广泛使用各种框架和库,如Spring Boot、React和Vue.js,以提高开发效率和应用性能。 ... [详细]
  • 提升 Kubernetes 集群管理效率的七大专业工具
    Kubernetes 在云原生环境中的应用日益广泛,然而集群管理的复杂性也随之增加。为了提高管理效率,本文推荐了七款专业工具,这些工具不仅能够简化日常操作,还能提升系统的稳定性和安全性。从自动化部署到监控和故障排查,这些工具覆盖了集群管理的各个方面,帮助管理员更好地应对挑战。 ... [详细]
  • 在日常的项目开发中,测试环境和生产环境通常采用HTTP协议访问服务。然而,从浏览器的角度来看,这种访问方式会被标记为不安全。为了提升安全性,当前大多数生产环境已经转向了HTTPS协议。本文将详细介绍如何在Spring Boot应用中配置SSL证书,以实现HTTPS安全访问。通过这一过程,不仅可以增强数据传输的安全性,还能提高用户对系统的信任度。 ... [详细]
  • 本文详细介绍了如何在Java Web服务器上部署音视频服务,并提供了完整的验证流程。以AnyChat为例,这是一款跨平台的音视频解决方案,广泛应用于需要实时音视频交互的项目中。通过具体的部署步骤和测试方法,确保了音视频服务的稳定性和可靠性。 ... [详细]
  • Jeecg开源社区正式启动第12届架构技术培训班,现已开放报名。本次培训采用师徒制模式,深入探讨Java架构技术。类似于大学导师指导研究生的方式,特别适合在职人员。导师将为学员布置课题,提供丰富的视频资料,并进行一对一指导,帮助学员高效学习和完成任务。我们的教学方法注重实践与理论结合,旨在培养学员的综合技术能力。 ... [详细]
  • Java 点餐系统源代码附带管理后台(免费提供)
    本项目提供了一套基于 Java 的点餐系统,包括前端小程序和后端管理平台。采用 Spring Boot 和 SSM 框架,结合 MySQL 和 Redis 数据库技术,适用于学习和二次开发。有需要源代码的开发者可以通过私信联系,免费获取下载链接。 ... [详细]
  • 网站访问全流程解析
    本文详细介绍了从用户在浏览器中输入一个域名(如www.yy.com)到页面完全展示的整个过程,包括DNS解析、TCP连接、请求响应等多个步骤。 ... [详细]
  • PTArchiver工作原理详解与应用分析
    PTArchiver工作原理及其应用分析本文详细解析了PTArchiver的工作机制,探讨了其在数据归档和管理中的应用。PTArchiver通过高效的压缩算法和灵活的存储策略,实现了对大规模数据的高效管理和长期保存。文章还介绍了其在企业级数据备份、历史数据迁移等场景中的实际应用案例,为用户提供了实用的操作建议和技术支持。 ... [详细]
  • DVWA学习笔记系列:深入理解CSRF攻击机制
    DVWA学习笔记系列:深入理解CSRF攻击机制 ... [详细]
  • 在Java Web服务开发中,Apache CXF 和 Axis2 是两个广泛使用的框架。CXF 由于其与 Spring 框架的无缝集成能力,以及更简便的部署方式,成为了许多开发者的首选。本文将详细介绍如何使用 CXF 框架进行 Web 服务的开发,包括环境搭建、服务发布和客户端调用等关键步骤,为开发者提供一个全面的实践指南。 ... [详细]
  • 在网络故障排查中,tcpdump 是一款强大的工具,尤其在 Linux 环境下。尽管开发环境中问题较少,但在测试或生产环境中,往往会遇到各种难以预料的异常情况。通过在问题发生的环境中启用 tcpdump 进行抓包,并重现问题,可以获取到宝贵的原始数据,为问题的诊断提供关键线索。本文将详细介绍如何使用 tcpdump 进行实战操作,帮助读者掌握这一技能。 ... [详细]
author-avatar
ah_落落_181
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有