Skip to content

Instantly share code, notes, and snippets.

@ojengwa
Forked from danidiaz/_Architecture.md
Created August 15, 2018 10:51
Show Gist options
  • Save ojengwa/3d7f287fbcd57e30125ed31c64b6e382 to your computer and use it in GitHub Desktop.
Save ojengwa/3d7f287fbcd57e30125ed31c64b6e382 to your computer and use it in GitHub Desktop.

Vertical decomposition. Creating cohesive services

One of the biggest misconceptions about services is that a service is an independent deployable unit, i.e., service equals process. With this view, we are defining services according to how components are physically deployed. In our example, since it’s clear that the backend admin runs in its own process/container, we consider it to be a service.

But this definition of a service is wrong. Rather you need to define your services in terms of business capabilities. The deployment aspect of the system doesn’t have to be correlated to how the system has been divided into logical services. For example, a single service might run in different components/processes, and a single component might contain parts of multiple services. Once you start thinking of services in terms of business capabilities rather than deployment units, a whole world of options open.

What are the Admin UI, Admin Backend and Website UI, Website Backend components? They basically act as containers of services. They are maintained by their own teams and their sole purpose is to coordinate between services. These components are business-logic agnostic.

Avoiding Microservice Megadisasters unsure about the approach to search and data duplication

Microservices and Rules Engines – a blast from the past

"search engine, not search service" "allows each microservice to put a component into it, and the search engine will run that set of rules" "what we are talking about here is not the whole microservice, but the search component of that service" "that way, the search engine doesn't need in and of itself access to all of that data directly"

Don't build a distributed monolith

"Don't couple systems with binary dependencies"

Alas this seems to go against the "thinking of services in terms of business capabilities rather than deployment units" principle. If the deployment is intertwined, is seems that there will be binary dependencies.

The Art of the node.js Rescue

The entity service antipattern

Five pieces of advice for new technical leads

The System Design Primer hn

in general, re-organizing the architecture of a system is usually possible - if and only if - the underlying data model is sane.

What is the convention for addressing assets and entities? Is it consistent and useful for informing both security or data routing?

What is the security policy for any specific entity in your system? How can it be modified? How long does it take to propagate that change? How centralized is the authentication?

If a piece of "data" is found, how complex is it to find the origin of this data?

What is the policy/system for enforcing subsystems have a very narrow capability to mutate information?

More than concentric layers The Software Architecture Chronicles

Managing the Complexity of Microservices Deployments

Designing Microservice Architectures the Right Way slides

To Test A System, You Need A Good Design Shunt pattern Two-level test suites?

For a test environment, you can inject an “In-Memory Data Source.” For production, you can use the “HTTP Server Data Source.”

How Contract Tests Improve the Quality of Your Distributed Systems

SOLID Architecture in Slices not Layers

For too long we've lived under the tyranny of n-tier architectures. Building systems with complicated abstractions, needless indirection and more mocks in our tests than a comedy special. But there is a better way - thinking in terms of architectures of vertical slices instead horizontal layers. Once we embrace slices over layers, we open ourselves to a new, simpler architecture, changing how we build, organize and deploy systems.

Scaling without cross-functional teams

Growing Object-Oriented Software, Guided by Tests Without Mocks Unit testing anti-patterns: Structural Inspection

Test automation without a headache: Five key patterns

CSS-tricks

Three-sided border

CSS z-index Property

Note: z-index only works on positioned elements (position:absolute, position:relative, or position:fixed).

CSS Grid in IE: Debunking Common IE Grid Misconceptions

#5: Columns of Equal Height: Super Simple Two Column Layout

https://stackoverflow.com/questions/3298746/apply-different-css-stylesheet-for-different-parts-of-the-same-web-page

Combining multiple CSS files without conflicting code?

Guidelines for better and faster CSS

Guidelines for Brutalist Web Design HN

css-nesting request to pick up the css-nesting proposal

The problem with CSS pre-processors What Will Save Us from the Dark Side of CSS Pre-Processors? WHY I'M (STILL) AGAINST SASS & LESS

Modern CSS Explained For Dinosaurs

CSS Utility Classes and "Separation of Concerns"

You might not need a CSS framework

Bootstrap

Transclusion in self-contained systems

At first, that sounds obvious, especially when you pretend that styles and scripts are isolated. Unfortunately they aren’t. However, if you manually provide for the highest possible isolation, for example by preventing collisions of CSS selectors (e.g. using system-specific HTML class prefixes), you can come to grips with this problem.

css isolation - How To Isolate a div from public CSS styles? - CSS isolation: there has got to be a better way - Sandbox local HTML/CSS code snippets inside an iframe (for style guides/pattern libraries) - How to isolate CSS styles to one area?

Some JavaScript libraries provide a noConflict mode. The technique is very simple: when the library initially loads, it keeps a copy of the global variable sat where it wants to live. When noConflict is called, the library puts the old global variable back where it was.

Restrict CSS applying on a particular div Reset/remove CSS styles for element only

A Vision for Our Sass

Basic concepts of flexbox

When we describe flexbox as being one dimensional we are describing the fact that flexbox deals with layout in one dimension at a time — either as a row or as a column. This can be contrasted with the two-dimensional model of CSS Grid Layout, which controls columns and rows together.

writing-mode

The writing-mode CSS property defines whether lines of text are laid out horizontally or vertically, as well as the direction in which blocks progress.

Introduction to the CSS basic box model

Layout and the containing block

CSS Border-Image

My Favorite Ways of Centering With CSS

Bootstrap 4.1.2 released hn

9 CSS in JS Libraries You Should Know in 2018

Layoutit – An interactive CSS Grid generator HN

Automatically remove unused css from Bootstrap or other frameworks

Openstreetmap

Why Use OpenStreetMap Instead of Google Maps? hn

https://operations.osmfoundation.org/policies/tiles/

https://wiki.openstreetmap.org/wiki/Slippy_Map

Slippy Map is, in general, a term referring to modern web maps which let you zoom and pan around (the map slips around when you drag the mouse).

https://www.mapbox.com/help/how-web-apps-work/

https://wiki.openstreetmap.org/wiki/Browsing https://wiki.openstreetmap.org/wiki/Main_Page https://wiki.openstreetmap.org/wiki/Tiles

square bitmap graphics displayed in a grid arrangement to show a map

https://switch2osm.org/ https://blog.openstreetmap.org/2018/06/20/switch2osm/

the switch2osm website, with up to date information on running your own OSM based services

Apart from very limited testing purposes, you should not use the tiles supplied by OpenStreetMap.org itself. OpenStreetMap is a volunteer-run non-profit body and cannot supply tiles for large-scale commercial use. Rather, you should use a third party provider that makes tiles from OSM data, or generate your own.

Serving your own maps is a fairly intensive task. Depending on the size of the area you’re interested in serving and the traffic you expect the system requirements will vary. In general, requirements will range from 10-20GB of storage, 4GB of memory, and a modern dual-core processor for a city-sized region to 300GB+ of fast storage, 24GB of memory, and a quad-core processor for the entire planet.

We would recommend that you begin with extracts of OpenStreetMap data – for example, a city, county or small country – rather than spending a week importing the whole world (planet.osm) and then having to restart because of a configuration mistake!

Geofabrik

Mapnik

Meteogalicia

RSS, GeoRSS, Podcast e JSON

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment