Formal way to model or describe distributed systems architecture
I am not sure what you mean by "formal approach" but have you looked at Petri Nets? Many consider Petri Nets to be a "formal approach".

Personally, I use Petri's net elements (Place, Transition, Input, Output) to organize my computer program (logic annotations to net elements). I also use it to organize requirements (annotations meant for human interpretation). I find it useful to begin with a diagram (technically, graphical annotations to net elements but if each graphic represents one and only one net element then the diagram may be used to generate the net elements). Then to aid my memory I use forms to create the annotations. Based on the diagrams and the forms, I create my computer programs.  For more information about this check out "Net Elements and Annotations for Computer Programming: Computations and Interactions in PDF".

Sometimes, I create a "high-level" diagram based on a Petri Net diagram to create a view of the system. [A high-level (Petri Net) diagram is a Petri Net diagram where one or more than one graphic object represented more than one net element]. Sometimes, I begin with a high-level diagram and break it down to a Petri Net diagram. In the "high-level" case, the form views are also applicable.