Tese de Arquiteto de Software Sênior de Exame Suave - Sobre o Estilo de Arquitetura de Software

No estilo de arquitetura de software

Um estilo de arquitetura de software é um padrão idiomático que descreve a maneira como um sistema é organizado em um domínio de aplicativo específico. Um estilo arquitetônico define uma família de sistemas, ou seja, uma arquitetura define um vocabulário e um conjunto de restrições. O vocabulário contém alguns tipos de componentes e conexões, e esse conjunto de restrições indica como o sistema combina esses componentes e conexões. O estilo arquitetônico reflete as propriedades estruturais e semânticas compartilhadas por muitos sistemas no domínio e orienta como organizar efetivamente vários módulos e subsistemas em um sistema completo.

Concentre-se no tópico " Sobre o estilo da arquitetura de software " e discuta-o a partir dos três aspectos a seguir.

1. Descreva brevemente os projetos de desenvolvimento de sistemas de software que você participou na análise e design e os principais trabalhos que você assumiu.

2. Quais são os estilos de arquitetura de software comumente usados ​​no desenvolvimento de sistemas de software? Elabore o significado específico de cada estilo.

3. Descreva em detalhes qual estilo de arquitetura de software é usado no sistema de software que você participou da análise e projeto e analise as razões para adotar esse estilo de projeto de arquitetura.

Resumo:

Em novembro de 2019, participei do projeto "educação online individual para professores estrangeiros" de uma plataforma de educação online na província de Guangdong. Este projeto oferece aos clientes ensino em vídeo individual por professores estrangeiros europeus e americanos, social círculos, transmissão pública ao vivo e outras funções, fornecendo uma gama completa de suporte de software, sou arquiteto de sistema nesta equipe de projeto, responsável principalmente pelo design geral da arquitetura e seleção de middleware. Tomando a plataforma educacional como exemplo, este artigo discute principalmente a aplicação específica do estilo de arquitetura de software neste projeto. Todo o sistema adota o conceito de design de arquitetura de software hierárquica com três camadas, que são camada de aplicativo, camada de serviço e camada de dados. No projeto da camada de lógica de negócios na camada de aplicativo, todo o sistema de negócios é dividido em mais de dez subsistemas. A camada de serviço usa a estrutura de serviço SpringCloud Alibaba como núcleo e a camada de dados usa a estrutura Mybatis. Todo o trabalho de desenvolvimento do sistema durou 18 meses. Atualmente, o sistema funciona de forma estável há quase um ano e meio. A prática provou que esse projeto de arquitetura reduz efetivamente os custos de manutenção e melhora a abertura, escalabilidade, reutilização e portabilidade do sistema.

texto:

À medida que o país presta cada vez mais atenção à educação, a participação no mercado de ensino de inglês está aumentando gradualmente e a demanda dos usuários por aprimoramento do inglês oral está aumentando. Para isso, algumas empresas começaram a fornecer plataformas de bate-papo com estrangeiros. Nossa empresa decidiu entrar no campo da educação oral a partir do campo da comunicação internacional. Para esta mudança estratégica, a empresa desenhou um sistema de plataforma de educação online (doravante denominado “sistema”) em novembro de 2019. O sistema ajuda as pessoas a se comunicarem e ensinarem pessoalmente com professores estrangeiros na Europa e na América. Entre eles, o bate-papo casual oferece uma chamada de vídeo QQ e os cursos formais também fornecem material didático interativo H5 para melhorar a qualidade do ensino. Ao mesmo tempo, há transmissões públicas ao vivo para atrair novos alunos e testes de IA são usados ​​para avaliar as habilidades dos alunos e reduzir custos. Participei do desenvolvimento do projeto como arquiteto de sistemas e fui o principal responsável por projetar a arquitetura do sistema. Há 9 membros nesta equipe de projeto.Eu sou o principal responsável pela formulação do plano do projeto, análise de demanda, design de arquitetura geral e seleção de tecnologia e design subjacente. A obra arquitetônica do projeto foi concluída em fevereiro do ano seguinte, e todo o projeto levou 18 meses para ser concluído em maio de 2021.

No início do trabalho arquitetônico, percebemos que o estilo arquitetônico define a terminologia utilizada para descrever o sistema e um conjunto de regras para orientar a construção do sistema. Essa reutilização de software em nível de arquitetura pode melhorar muito nosso processo de construção de sistema.

Os estilos de arquitetura de software comumente usados ​​no desenvolvimento de sistemas de software incluem: estilo de fluxo de dados, estilo de chamada/retorno, estilo de componente independente, estilo de máquina virtual e estilo de warehouse. Os estilos de fluxo de dados incluem sequências em lote e filtros de pipeline, onde cada etapa é processada de forma independente e executada sequencialmente, adequada para processos lineares simples. Os estilos de chamada/retorno incluem estilo de programa principal/sub-rotina, estilo orientado a objeto e estilo de estrutura hierárquica, que reduzem ainda mais o acoplamento do sistema e esclarecem os níveis do sistema. O estilo de componente independente inclui comunicação de processo, orientada a eventos (chamada implícita) e seus recursos de componente fornecem suporte para reutilização de software. O estilo de máquina virtual inclui estilo de intérprete e estilo de sistema baseado em regras, que tem boa flexibilidade e pode personalizar regras. Os estilos Warehouse incluem estilo de sistema de banco de dados, estilo de sistema de hipertexto e estilo de sistema de quadro-negro, que são centrados em dados. Além disso, existem estilos arquitetônicos como dssa e soa.

Depois de entender os requisitos, decidimos adotar um estilo de arquitetura hierárquica com a assessoria dos consultores técnicos da empresa. Para resolver o problema de redundância de código do sistema de comunicação original da empresa, implementamos o serviço de sistema e diferentes centros de serviço na camada intermediária fornecem diferentes serviços de negócios. Finalmente, dividimos o sistema em camada de aplicação, camada de serviço e camada de dados. A camada de aplicativo é responsável por negócios específicos e exibição de exibição, como a página inicial do site, entrada de pesquisa e exibição de resultados no aplicativo, etc. Ela é dividida ainda em camada de exibição e camada de lógica de negócios. A camada de serviço é responsável por fornecer suporte de serviço geral para a camada de aplicação, como serviço de gerenciamento de contas, serviço de gerenciamento de sessão, etc., que é subdividida em uma camada de processamento lógico e uma camada de interface de dados. A camada de dados é responsável por fornecer serviços de acesso ao armazenamento de dados, como serviços de banco de dados, serviços de cache, serviços de arquivos, serviços de pesquisa, etc. Abaixo, apresentarei o processo de design da arquitetura de três camadas em detalhes.

A primeira é a camada de aplicação. Na camada de aplicativo, dividimos o sistema horizontalmente de acordo com o aplicativo, o que é útil para gerenciamento e manutenção do código. Dividimos o sistema em mais de dez subsistemas, como sistema de gerenciamento de material didático, sistema público de transmissão ao vivo, sistema de testes de alunos e sistema de gerenciamento de cursos.Aqui tomamos o sistema de gerenciamento de material didático como exemplo. O sistema de gerenciamento de courseware é responsável pelo courseware usado pelos alunos em sala de aula e possui vários módulos funcionais, como edição de courseware, visualização de courseware, interação de courseware e exibição de courseware. O módulo de função chama o suporte de serviço da camada de serviço. Por exemplo, a interação do courseware precisa chamar o serviço de comunicação AMQP implementado pelo RabbitMQ na camada de serviço. Por meio deste serviço de comunicação, a sincronização do courseware entre o professor e o aluno é realizada, para que a interação do curso se torne interessante e vívida. Seja interativo. Por outro lado, para distinguir a autoridade de interação do lado do professor e do lado do aluno, o módulo do curso também precisa chamar o serviço de conta da camada de serviço para determinar a identidade do usuário, de modo a esclarecer a autoridade de interação do usuário em a interação do curso. Ao mesmo tempo, para melhorar a capacidade de modificação e a interatividade do material didático, o material didático é escrito em H5. A camada de aplicativo usa principalmente vue, uma estrutura MVVM para construir interfaces de usuário. Seu núcleo é fornecer ligação de dados bidirecional entre view e viewModel. Não há conexão direta entre view e model, mas interação por meio de viewModel. Alterações de view são refletidas automaticamente em viewModel e vice-versa. Isso garante que a view e a consistência dos dados . Além disso, existem separação dinâmica e estática, recursos dinâmicos estáticos, etc., que não serão repetidos aqui.

A segunda é a camada de serviço, que é implementada usando tecnologias como a estrutura de serviço SpringCloud Alibba. Com a expansão da escala de servidores e o aumento de desenvolvedores, cada aplicativo se torna complexo, inchado e há muita duplicação de código. Para resolver este problema, duas soluções são propostas. Uma delas é dividir o aplicativo em partes menores, garantindo que cada aplicativo permaneça em um tamanho adequado. A vantagem é que o projeto pode ser concluído mais rapidamente e o código é mais fácil de implementar. Existem alguns problemas com esta solução: por um lado, ainda existe a pressão sobre o número de conexões ao banco de dados e, por outro lado, ainda existe a redundância do código. Então adotamos a segunda solução - a solução de serviço. A solução de serviço significa adicionar uma camada de serviço à camada de aplicativo e à camada de dados. Em primeiro lugar, do ponto de vista estrutural, a estrutura do sistema é mais clara e tridimensional. Em termos de estabilidade, muitos códigos dispersos se tornaram serviços gerais e entregues a uma equipe dedicada para manutenção. Em consideração ao custo e à maturidade da tecnologia, adotamos a estrutura de serviço SpringCloud Alibaba desenvolvida pela Alibaba. O SpringCloud Alibaba fornece uma solução completa para o desenvolvimento de microsserviços, que inclui os componentes necessários para o desenvolvimento de microsserviços de aplicativos distribuídos, como: componente de registro Nacos, componente de balanceamento de carga Ribbon, componente de chamada remota OpenFeign, componente de gateway Gateway, proteção de serviço O componente Sentinel e o componente de gerenciamento de configuração de serviço SpringCloudConfig facilita aos desenvolvedores desenvolver facilmente serviços de aplicativos distribuídos por meio do modelo de programação SpringCloud.

A última é a camada de dados, que envolve módulos como cache, sistema de arquivos, banco de dados, serviço de notificação de dados e sistema de pesquisa. Devido à natureza centralizada do acesso do usuário aos dados, implementamos um mecanismo de cache baseado em SpringCache e Redis. Devido às características comerciais do sistema, o banco de dados geralmente tem muito mais operações de leitura do que operações de gravação, portanto, separamos leitura e gravação para o banco de dados. Em termos de acesso a dados, Java já possui muitas tecnologias maduras, que podem ser divididas em três tipos. A primeira é fornecer aos usuários uma API proprietária, conveniente para implementar funções, mas com pouca versatilidade. A segunda é acessar o banco de dados via JDBC.A própria camada de dados é uma implementação JDBC, ou seja, expõe a interface JDBC para a camada de serviço. O custo desse método é muito baixo e o custo de migração também é muito baixo, mas o custo de desenvolvimento é relativamente alto. A terceira maneira é baseada em ORM ou interface semelhante a ORM. Esta é a maneira que adotamos.Ao usar o banco de dados, usamos a estrutura ORM-Mybatis e, em seguida, envolvemos a estrutura em uma camada para realizar as funções da camada de dados.A interface do Mybatis ainda está exposta ao mundo exterior. O desenvolvimento desse método é eficiente, ágil, de baixo custo e com boa compatibilidade. Além disso, usamos o ElasticSearch como mecanismo de pesquisa na camada de dados, e a implantação física da camada de acesso a dados usa o método Proxy. Devido à limitação de espaço, não são fornecidos mais detalhes aqui.

No final, o projeto foi lançado com sucesso e está funcionando normalmente há quase um ano e meio, recebendo comentários favoráveis ​​de todas as partes. Em particular, a boa interatividade do material didático H5 fez com que um grande número de colegas da indústria imitasse e usasse o H5 para fazer material didático. Além disso, nossa arquitetura de solução orientada a serviços é considerada uma solução clássica para a reconstrução de muitos sistemas corporativos de Internet tradicionais. No projeto de arquitetura do sistema, introduzimos a ideia de projeto de arquitetura hierárquica, que reduz efetivamente o custo de manutenção e melhora a abertura, escalabilidade, reutilização e portabilidade do sistema. Claro que ainda existem alguns problemas. Se o courseware H5 adotar o protocolo Http, é fácil ser sequestrado ilegalmente e incorporado com anúncios, o que pode ser resolvido modificando o protocolo para Https. Além disso, o algoritmo de balanceamento de carga que usamos é um algoritmo round-robin ponderado, que é muito simples e geralmente causa alocação de recursos irracional. Isso pode ser resolvido alterando o algoritmo para o algoritmo de número mínimo ponderado de conexões. Esses são os pontos nos quais preciso prestar atenção e melhorar no futuro design e desenvolvimento do sistema, e também são as direções nas quais devo trabalhar duro no futuro.

Acho que você gosta

Origin blog.csdn.net/qq837993702/article/details/127218973
Recomendado
Clasificación